From 6da98c3a5482c80e652443393e70be9d7c423324 Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Fri, 5 Jun 2026 15:32:55 +0530 Subject: [PATCH] feat(renderer): keyboard shortcuts for file ops (open, save, close, next/prev tab) --- src/renderer/components/layout/AppShell.tsx | 2 + src/renderer/hooks/use-file-shortcuts.ts | 72 ++++++++ tests/unit/hooks/use-file-shortcuts.test.tsx | 171 +++++++++++++++++++ 3 files changed, 245 insertions(+) create mode 100644 src/renderer/hooks/use-file-shortcuts.ts create mode 100644 tests/unit/hooks/use-file-shortcuts.test.tsx diff --git a/src/renderer/components/layout/AppShell.tsx b/src/renderer/components/layout/AppShell.tsx index 629c71a..5c13b2f 100644 --- a/src/renderer/components/layout/AppShell.tsx +++ b/src/renderer/components/layout/AppShell.tsx @@ -8,8 +8,10 @@ import { PreviewPane } from '@/components/preview/PreviewPane'; import { Sidebar } from '@/components/sidebar/Sidebar'; import { useAppStore } from '@/stores/app-store'; import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@/components/ui/resizable'; +import { useFileShortcuts } from '@/hooks/use-file-shortcuts'; export function AppShell() { + useFileShortcuts(); const { sidebarVisible, previewVisible, paneSizes, setPaneSizes } = useAppStore(); return ( diff --git a/src/renderer/hooks/use-file-shortcuts.ts b/src/renderer/hooks/use-file-shortcuts.ts new file mode 100644 index 0000000..f9cdbc2 --- /dev/null +++ b/src/renderer/hooks/use-file-shortcuts.ts @@ -0,0 +1,72 @@ +import { useEffect } from 'react'; +import { useFileStore } from '@/stores/file-store'; + +/** + * Global keyboard shortcuts for file operations. + * + * - Cmd/Ctrl+O: open file + * - Cmd/Ctrl+Shift+O: open folder + * - Cmd/Ctrl+S: save active buffer + * - Cmd/Ctrl+W: close active tab + * - Cmd/Ctrl+Tab / Cmd/Ctrl+Shift+Tab: next/previous tab (wraps) + * + * Suppressed when an ,