@@ -125,9 +125,13 @@ export function isInsertDateTimeShortcut(e: KeyboardEvent): boolean {
125125export function isUsInsertDateTimeQuoteShortcut ( e : KeyboardEvent ) : boolean {
126126 if ( ! hasMod ( e ) || ! e . shiftKey || e . altKey ) return false ;
127127 if ( isImeOrDeadKey ( e ) ) return false ;
128+ // Number formats (§8) share Ctrl/Cmd+Shift+digit chords — must win over insert date/time.
129+ if ( isNumberFormatShortcut ( e ) ) return false ;
128130
129131 if ( e . key === '"' ) return true ;
130132 if ( ! isQuoteTypingCode ( e . code ) ) return false ;
133+ // Physical quote-key slots also type digits 1–9 with Shift — not insert date/time.
134+ if ( / ^ [ 0 - 9 ] $ / . test ( e . key ) ) return false ;
131135
132136 // ⌘+Shift+3 is macOS full-screen screenshot — browser never receives Digit3.
133137 if (
@@ -201,6 +205,12 @@ export function isDigitFormatKey(e: KeyboardEvent, digit: string): boolean {
201205 return e . code === `Digit${ digit } ` || e . code === `Numpad${ digit } ` ;
202206}
203207
208+ /** Ctrl/Cmd+Shift+1–6 — number format (TEC-2311 §8). */
209+ export function isNumberFormatShortcut ( e : KeyboardEvent ) : boolean {
210+ if ( ! isNumberFormatModifier ( e ) ) return false ;
211+ return [ '1' , '2' , '3' , '4' , '5' , '6' ] . some ( ( d ) => isDigitFormatKey ( e , d ) ) ;
212+ }
213+
204214/** Physical codes commonly used to type `)` (formula list). */
205215const CLOSE_PAREN_TYPING_CODES = new Set ( [
206216 'BracketRight' ,
@@ -224,7 +234,12 @@ export function isFormulaListShortcut(e: KeyboardEvent): boolean {
224234 return e . code === 'BracketRight' ;
225235 }
226236
227- return CLOSE_PAREN_TYPING_CODES . has ( e . code ) ;
237+ if ( ! CLOSE_PAREN_TYPING_CODES . has ( e . code ) ) return false ;
238+ // US Shift+5 is `%` (number format). AZERTY Shift+5 is `)`.
239+ if ( e . code === 'Digit5' || e . code === 'Numpad5' ) {
240+ return e . key === ')' ;
241+ }
242+ return true ;
228243}
229244
230245export function isFindShortcut ( e : KeyboardEvent ) : boolean {
@@ -251,13 +266,14 @@ export function isFindReplaceShortcut(e: KeyboardEvent): boolean {
251266export function isBrowserZoomShortcut ( e : KeyboardEvent ) : boolean {
252267 if ( ! ( e . metaKey || e . ctrlKey ) || e . altKey ) return false ;
253268 if ( isImeOrDeadKey ( e ) ) return false ;
269+ if ( isNumberFormatShortcut ( e ) ) return false ;
254270
255271 if (
256272 e . code === 'Equal' ||
257273 e . code === 'NumpadAdd' ||
258274 e . code === 'Minus' ||
259275 e . code === 'NumpadSubtract' ||
260- e . code === 'Digit6'
276+ ( e . code === 'Digit6' && ! e . shiftKey )
261277 ) {
262278 return true ;
263279 }
@@ -310,7 +326,7 @@ function isWinCtrlSlashShortcut(e: KeyboardEvent): boolean {
310326 */
311327function isOptionSlashOrColonShortcut ( e : KeyboardEvent ) : boolean {
312328 if ( e . getModifierState ?.( 'AltGraph' ) ) return false ;
313- if ( ! e . altKey || e . ctrlKey ) return false ;
329+ if ( ! e . altKey || e . ctrlKey || e . metaKey ) return false ;
314330 if ( isImeOrDeadKey ( e ) ) return false ;
315331
316332 if ( e . key === '/' || e . key === ':' ) return true ;
@@ -328,6 +344,7 @@ export function isOpenShortcutsModalShortcut(e: KeyboardEvent): boolean {
328344 if ( isImeOrDeadKey ( e ) ) return false ;
329345 if ( isBrowserZoomShortcut ( e ) ) return false ;
330346 if ( isFormulaListShortcut ( e ) ) return false ;
347+ if ( isInsertDateTimeShortcut ( e ) ) return false ;
331348
332349 if ( isWinCtrlSlashShortcut ( e ) ) return true ;
333350 if ( isOptionSlashOrColonShortcut ( e ) ) return true ;
0 commit comments