diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index a6a739c..bb8b463 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -3,6 +3,7 @@ import "./globals.css";
import { SettingsProvider } from "@/components/providers/SettingsProvider";
import { AuthProvider } from "@/providers/AuthProvider";
import { PromptOptimizerProvider } from "@/providers/PromptOptimizerProvider";
+import { HotkeysProvider } from "@/providers/HotkeysProvider";
import { Toaster } from "@/components/ui/Toast";
export const metadata: Metadata = {
@@ -23,10 +24,12 @@ export default function RootLayout({
-
- {children}
-
-
+
+
+ {children}
+
+
+
diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
index d76d171..fb80cb6 100644
--- a/src/components/layout/Sidebar.tsx
+++ b/src/components/layout/Sidebar.tsx
@@ -11,6 +11,7 @@ import { useConversations } from '@/hooks/useConversations';
import { useAuth } from '@/providers/AuthProvider';
import type { Conversation } from '@/drizzle/schema';
import { useState, useRef, useEffect, useCallback } from 'react';
+import { useHotkeys } from '@/hooks/useHotkeys';
interface SidebarProps {
isOpen?: boolean;
@@ -54,21 +55,45 @@ export function Sidebar({ isOpen = true }: SidebarProps) {
};
}, [menuOpen]);
- // 全局键盘快捷键:⌘K / Ctrl+K 打开搜索
- useEffect(() => {
- const handleKeyDown = (e: KeyboardEvent) => {
- // ⌘K (Mac) 或 Ctrl+K (Windows/Linux)
- if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
- e.preventDefault();
- setShowSearchModal(true);
- }
- };
+ // 快捷键:N - 新建对话(单键,非输入框时生效)
+ useHotkeys(
+ 'new-chat',
+ {
+ key: 'n',
+ description: '新建对话',
+ category: '导航',
+ action: useCallback(() => setShowNewChatModal(true), []),
+ },
+ [setShowNewChatModal]
+ );
- document.addEventListener('keydown', handleKeyDown);
- return () => {
- document.removeEventListener('keydown', handleKeyDown);
- };
- }, []);
+ // 快捷键:Cmd/Ctrl + K - 打开搜索
+ useHotkeys(
+ 'open-search-k',
+ {
+ key: 'k',
+ modifiers: ['ctrl', 'meta'],
+ description: '打开搜索',
+ category: '导航',
+ action: useCallback(() => setShowSearchModal(true), []),
+ allowInInput: true,
+ },
+ [setShowSearchModal]
+ );
+
+ // 快捷键:Cmd/Ctrl + / - 打开搜索(备用)
+ useHotkeys(
+ 'open-search-slash',
+ {
+ key: '/',
+ modifiers: ['ctrl', 'meta'],
+ description: '打开搜索',
+ category: '导航',
+ action: useCallback(() => setShowSearchModal(true), []),
+ allowInInput: true,
+ },
+ [setShowSearchModal]
+ );
// 创建新对话 - 显示选择助手弹框
const handleNewChat = () => {