Skip to content

feat(hotkeys): 风格包直达快捷键——按风格包 ID 绑定自定义全局键(#759) - #930

Open
bigsongeth wants to merge 2 commits into
Open-Less:betafrom
bigsongeth:feat/style-pack-hotkeys
Open

feat(hotkeys): 风格包直达快捷键——按风格包 ID 绑定自定义全局键(#759)#930
bigsongeth wants to merge 2 commits into
Open-Less:betafrom
bigsongeth:feat/style-pack-hotkeys

Conversation

@bigsongeth

Copy link
Copy Markdown
Contributor

概述

实现 #759 的功能部分:为具体风格包绑定自定义全局快捷键,按下直接切换("风格直达")。托盘菜单 bug 部分已拆至 #808,本 PR 不涉及。

设计取舍

不采用原 issue 的 Alt+1~9 固定槽位方案,改为快捷键绑定到风格包 ID

  • 按「已启用列表第 N 个」绑定很脆弱:启停任一风格包会让所有序号位移,肌肉记忆作废;
  • macOS 上 Option+数字本身用于输入特殊字符(¡™£…),全局注册会吞掉正常输入,故不预设默认键,用户按需配置;
  • fix(windows): show and activate custom style packs from the tray menu #808 的修复方向(按 pack ID 精确激活)一致。

实现

后端

  • UserPreferences 新增 stylePackHotkeys: Vec<StylePackHotkey { packId, binding }>(默认空,serde default 兼容老配置文件,wire 三处映射齐全)
  • 新命令 set_style_pack_hotkeys(整表替换):集合内去重(同包一条、同键一条)+ 与其它全部快捷键互斥;现有各 setter 反向检查新集合;reject_hotkey_collisions / reconcile_hotkey_collisions[area] 录音方式无效,重启软件会切换回长按识别 #904 兜底模式)同步覆盖
  • 注册:Inner.style_pack_hotkeys: HashMap<packId, ComboHotkeyMonitor>,启动 supervisor + 设置变更时全量重建(避免「两包互换按键」的增量更新注册冲突);桥接线程含 shortcut_recording_active 保护
  • 触发复用 activate_style_pack_by_id:禁用包自动启用、prefs 持久化、prefs:changed 广播、托盘刷新,与前端点选激活完全同路径;包已删除时 no-op + warn
  • 删除风格包时清理孤儿绑定
  • 切换成功后复用选区润色的无焦点轻量提示胶囊弹「已切换:<风格名>」(2s 自动隐藏);原有 switchStyleHotkey 循环切换此前静默,一并补上提示
  • 底层零改动:parse_primary / parse_global_hotkey 已支持数字键与 alt 修饰键

前端

  • 设置 → 快捷键新增「风格直达快捷键」区:每行 = 风格包下拉(SelectLite,列全部包、停用的标注、已绑定的置灰防重复)+ ShortcutRecorder + 删除,底部「添加」按钮
  • IPC 封装、mock、i18n(zh-CN / zh-TW / en / ja / ko)

验证

  • cargo check / cargo test --lib(914 + 新增 6 个单测:冲突校验 ×4、serde 兼容 ×2)/ tsc --noEmit 全绿
  • 浏览器 mock 模式:添加 → 选包 → 录键 → 落库 → 删除全链路
  • 装机实测(macOS):启动注册 style pack hotkey listeners installed after 1 attempt(s);真实按键触发日志 style pack hotkey activated imported-88cee…(超级豆包)activeStylePackId 落盘一致;切换提示胶囊弹出正常;老 preferences.json(无新字段)加载正常

Closes #759(托盘部分由 #808 跟进)

🤖 Generated with Claude Code

bigsongeth and others added 2 commits August 6, 2026 21:07
不做原 issue 的 Alt+1~9 固定槽位(序号随启停位移、macOS 上 Option+数字
会吞特殊字符输入),改为在设置→快捷键里为具体风格包各配一个快捷键:
- prefs 新增 stylePackHotkeys: Vec<{packId, binding}>,默认空、无预设键
- 触发复用 activate_style_pack_by_id:禁用包自动启用、prefs/托盘/前端同步
- 集合式冲突校验:集合内去重 + 与其它全部快捷键互斥,reconcile 兜底(Open-Less#904 模式)
- 删除风格包时清理孤儿绑定;启动 supervisor + 设置变更全量重建注册
- 设置 UI:风格包下拉(SelectLite)+ 录制器 + 增删行,i18n×5

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feature][ux] 增加风格卡片快捷键 Alt+1~9 快速切换风格,并修复托盘右键菜单输出风格显示问题

1 participant