(e: KeyboardEvent)
| 507 | |
| 508 | useEffect(() => { |
| 509 | const handler = (e: KeyboardEvent): void => { |
| 510 | const state = useStore.getState() |
| 511 | const overrides = state.keymapOverrides |
| 512 | |
| 513 | if (isUndoShortcut(e)) { |
| 514 | const assetUndoEntry = state.assetUndoStack.at(-1) |
| 515 | if (assetUndoEntry) { |
| 516 | const recentAssetDelete = |
| 517 | Date.now() - assetUndoEntry.createdAt <= ASSET_UNDO_SHORTCUT_GRACE_MS |
| 518 | if (recentAssetDelete || !isEditableShortcutTarget(e.target)) { |
| 519 | e.preventDefault() |
| 520 | void state.undoLastAssetAction() |
| 521 | return |
| 522 | } |
| 523 | } |
| 524 | } |
| 525 | |
| 526 | if (matchesShortcut(e, overrides, 'global.commandPalette')) { |
| 527 | // ⇧⌘P — command palette |
| 528 | e.preventDefault() |
| 529 | setBufferPaletteOpen(false) |
| 530 | setVaultTextSearchOpen(false) |
| 531 | setCommandPaletteOpen(!state.commandPaletteOpen) |
| 532 | return |
| 533 | } |
| 534 | if (!state.vimMode && matchesShortcut(e, overrides, 'global.searchNotesNonVim')) { |
| 535 | // ⌘F / Ctrl+F — note search when Vim mode is off |
| 536 | e.preventDefault() |
| 537 | setBufferPaletteOpen(false) |
| 538 | setVaultTextSearchOpen(false) |
| 539 | setSearchOpen(true) |
| 540 | return |
| 541 | } |
| 542 | if (matchesShortcut(e, overrides, 'global.newQuickNote')) { |
| 543 | // ⇧⌘N — new quick note |
| 544 | e.preventDefault() |
| 545 | const title = resolveQuickNoteTitle( |
| 546 | state.notes, |
| 547 | state.quickNoteDateTitle, |
| 548 | state.quickNoteTitlePrefix ?? undefined |
| 549 | ) |
| 550 | void state.createAndOpen('quick', '', { title, focusTitle: true }) |
| 551 | return |
| 552 | } |
| 553 | if (matchesShortcut(e, overrides, 'global.toggleWordWrap')) { |
| 554 | // ⌥Z — toggle word wrap (matches VSCode/Sublime convention) |
| 555 | e.preventDefault() |
| 556 | state.setWordWrap(!state.wordWrap) |
| 557 | return |
| 558 | } |
| 559 | if (matchesShortcut(e, overrides, 'global.exportNotePdf')) { |
| 560 | e.preventDefault() |
| 561 | void state.exportActiveNotePdf() |
| 562 | return |
| 563 | } |
| 564 | if (matchesShortcut(e, overrides, 'global.zoomIn')) { |
| 565 | e.preventDefault() |
| 566 | void window.zen.zoomInApp() |
no test coverage detected