From d7ad0cc64d464cdc177725acdb31b95f5fea2f60 Mon Sep 17 00:00:00 2001 From: patrick <980141374@qq.com> Date: Tue, 2 Jun 2026 20:13:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E7=BC=A9=E7=9F=AD=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE=E5=8F=96=E8=AF=8D=E7=AD=89=E5=BE=85?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=87=B3180ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将键盘释放等待和剪贴板复制等待的超时时间从1000ms/1500ms统一缩短至180ms,提升快捷键触发时获取选中文本的响应速度。 --- src/main/api/renderer/settings.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/api/renderer/settings.ts b/src/main/api/renderer/settings.ts index cd3e6e5e..9f85e9ca 100644 --- a/src/main/api/renderer/settings.ts +++ b/src/main/api/renderer/settings.ts @@ -14,8 +14,8 @@ import api from '../index' import databaseAPI from '../shared/database' const GLOBAL_SHORTCUT_COOLDOWN_MS = 180 -const KEY_RELEASE_WAIT_TIMEOUT_MS = 1000 -const CLIPBOARD_COPY_WAIT_TIMEOUT_MS = 1500 +const KEY_RELEASE_WAIT_TIMEOUT_MS = 180 +const CLIPBOARD_COPY_WAIT_TIMEOUT_MS = 180 /** * 快捷键触发时携带的文件输入 From 0d1c96f1999a6fbe236dd712cbd24acee753eb2c Mon Sep 17 00:00:00 2001 From: patrick <980141374@qq.com> Date: Tue, 2 Jun 2026 21:14:46 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(setting):=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE=E6=94=AF=E6=8C=81=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=A4=8D=E5=88=B6=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 autoCopy 配置项,默认禁用(避免无关快捷键产生副作用) - UI 添加开关控件,支持单独配置每个快捷键 - 双重判断机制:指令类型需要文本 AND 用户启用自动复制 - 新增 updateGlobalShortcutConfig API 支持配置热更新 - 迁移部分 internal: 通道至普通通道(快捷键相关 API) --- internal-plugins/setting/src/env.d.ts | 7 +- .../ShortcutsSetting/ShortcutsSetting.vue | 107 +++++++++++++++++- resources/preload.js | 13 ++- src/main/api/renderer/settings.ts | 96 ++++++++++++++-- src/renderer/src/env.d.ts | 7 +- 5 files changed, 206 insertions(+), 24 deletions(-) diff --git a/internal-plugins/setting/src/env.d.ts b/internal-plugins/setting/src/env.d.ts index 25e568dd..81e05d43 100644 --- a/internal-plugins/setting/src/env.d.ts +++ b/internal-plugins/setting/src/env.d.ts @@ -224,12 +224,17 @@ declare global { getCurrentShortcut: () => Promise registerGlobalShortcut: ( shortcut: string, - target: string + target: string, + autoCopy?: boolean ) => Promise<{ success: boolean; error?: string }> unregisterGlobalShortcut: (shortcut: string) => Promise<{ success: boolean error?: string }> + updateGlobalShortcutConfig: ( + shortcut: string, + config: { autoCopy: boolean } + ) => Promise<{ success: boolean; error?: string }> registerAppShortcut: ( shortcut: string, target: string diff --git a/internal-plugins/setting/src/views/ShortcutsSetting/ShortcutsSetting.vue b/internal-plugins/setting/src/views/ShortcutsSetting/ShortcutsSetting.vue index 70b8a4f0..2acf4505 100644 --- a/internal-plugins/setting/src/views/ShortcutsSetting/ShortcutsSetting.vue +++ b/internal-plugins/setting/src/views/ShortcutsSetting/ShortcutsSetting.vue @@ -29,6 +29,7 @@ interface GlobalShortcut { enabled: boolean configurable?: boolean configKey?: BuiltInShortcutKey + autoCopy?: boolean } type BuiltInShortcutKey = 'search' | 'closePlugin' | 'killPlugin' @@ -324,7 +325,10 @@ async function saveAliasMappings(nextStore: CommandAliasStore): Promise async function loadGlobalShortcuts(): Promise { try { const data = await window.ztools.internal.dbGet('global-shortcuts') - globalShortcuts.value = data || [] + globalShortcuts.value = (data || []).map((shortcut: any) => ({ + ...shortcut, + autoCopy: shortcut.autoCopy ?? false // 默认禁用 + })) } catch (err) { console.error('加载全局快捷键失败:', err) } @@ -670,6 +674,7 @@ async function handleSaveGlobalShortcut( } const oldShortcut = editingShortcut.value.shortcut + const autoCopy = editingShortcut.value.autoCopy ?? false // 保留原有 autoCopy 配置 try { if (oldShortcut !== recordedShortcut) { @@ -678,7 +683,8 @@ async function handleSaveGlobalShortcut( const result = await window.ztools.internal.registerGlobalShortcut( recordedShortcut, - targetCommand + targetCommand, + autoCopy ) if (result.success) { @@ -686,6 +692,7 @@ async function handleSaveGlobalShortcut( if (index >= 0) { globalShortcuts.value[index].shortcut = recordedShortcut globalShortcuts.value[index].target = targetCommand + // autoCopy 保持不变 } await saveGlobalShortcuts() @@ -695,7 +702,8 @@ async function handleSaveGlobalShortcut( if (oldShortcut !== recordedShortcut) { await window.ztools.internal.registerGlobalShortcut( oldShortcut, - editingShortcut.value.target + editingShortcut.value.target, + autoCopy ) } error(`快捷键注册失败: ${result.error}`) @@ -704,7 +712,8 @@ async function handleSaveGlobalShortcut( if (oldShortcut !== recordedShortcut) { await window.ztools.internal.registerGlobalShortcut( oldShortcut, - editingShortcut.value.target + editingShortcut.value.target, + autoCopy ) } console.error('更新快捷键失败:', err) @@ -723,7 +732,8 @@ async function handleSaveGlobalShortcut( id: Date.now().toString(), shortcut: recordedShortcut, target: targetCommand, - enabled: true + enabled: true, + autoCopy: false // 新建快捷键默认禁用自动复制 } globalShortcuts.value.push(newShortcut) @@ -732,7 +742,8 @@ async function handleSaveGlobalShortcut( try { const result = await window.ztools.internal.registerGlobalShortcut( recordedShortcut, - targetCommand + targetCommand, + false // 新建快捷键默认禁用自动复制 ) if (result.success) { success('快捷键添加成功!') @@ -880,6 +891,70 @@ async function handleDelete(id: string): Promise { } } +// 处理自动复制开关切换 +async function handleAutoCopyToggle(shortcut: any, event: Event): Promise { + console.log('[AutoCopy] 开关切换触发', { shortcut, event }) + + const target = event.target as HTMLInputElement | null + if (!target) { + console.error('[AutoCopy] 无法获取 target 元素') + return + } + + const newAutoCopy = target.checked + console.log('[AutoCopy] 新状态:', newAutoCopy, '旧状态:', shortcut.autoCopy) + + try { + // 1. 更新本地数据 + const index = globalShortcuts.value.findIndex((s) => s.id === shortcut.id) + console.log('[AutoCopy] 找到快捷键索引:', index) + + if (index >= 0) { + globalShortcuts.value[index].autoCopy = newAutoCopy + console.log('[AutoCopy] 本地数据已更新:', globalShortcuts.value[index]) + } + + // 2. 保存到数据库(清理数据,只保留可序列化的字段) + console.log('[AutoCopy] 开始保存到数据库...') + const dataToSave = globalShortcuts.value.map((s) => ({ + id: s.id, + shortcut: s.shortcut, + target: s.target, + enabled: s.enabled, + autoCopy: s.autoCopy, + ...(s.configurable !== undefined && { configurable: s.configurable }), + ...(s.configKey !== undefined && { configKey: s.configKey }) + })) + await window.ztools.internal.dbPut('global-shortcuts', dataToSave) + console.log('[AutoCopy] 数据库保存成功') + + // 3. 通知主进程更新配置 + console.log('[AutoCopy] 通知主进程更新配置:', { + shortcut: shortcut.shortcut, + autoCopy: newAutoCopy + }) + const result = await window.ztools.internal.updateGlobalShortcutConfig(shortcut.shortcut, { + autoCopy: newAutoCopy + }) + console.log('[AutoCopy] 主进程配置更新结果:', result) + + if (!result.success) { + throw new Error(result.error || '更新配置失败') + } + + console.log('[AutoCopy] 自动复制开关切换完成') + } catch (err: any) { + console.error('[AutoCopy] 更新自动复制开关失败:', err) + // 回滚 + target.checked = !newAutoCopy + const index = globalShortcuts.value.findIndex((s) => s.id === shortcut.id) + if (index >= 0) { + globalShortcuts.value[index].autoCopy = !newAutoCopy + console.log('[AutoCopy] 已回滚本地数据') + } + } +} + onMounted(() => { const userAgent = navigator.userAgent.toLowerCase() const platform = navigator.platform.toLowerCase() @@ -1152,6 +1227,20 @@ useJumpFunction(async (state) => {
+ + +