问题概述
一、功能请求:增加风格快捷键 Alt+1~9
现状:
当前仅支持一个"切换到上一个风格"的全局快捷键(默认 Ctrl+Shift+S),对应函数 switch_to_previous_style()(hotkey_loops.rs:831),只能向后循环切换启用的风格包(style packs)。在 coordinator.rs:340-344 中 ActionHotkeyKind 仅有 SwitchStyle 和 OpenApp 两种。
需求:
支持 Alt+1 ~ Alt+9 快速切换到对应的第 1~9 个已启用风格包(按列表顺序),类似浏览器标签页切换的 UX 模式。
涉及改动:
types.rs: 在 UserPreferences 中增加 9 个 style shortcut 字段,每个可绑定一个 style pack ID
hotkey_loops.rs: 增加 switch_to_style_by_index() 函数,从 ActionHotkeyKind 扩展或新增 hotkey 注册
commands/hotkeys.rs: 增加后端绑定/解绑接口
ShortcutsSection.tsx: 前端快捷键设置 UI 展示 9 个风格槽位
style-packs.ts: 前端 IPC 桥接
期望行为:
- 用户可在设置中为每个风格槽位绑定快捷键(默认 Alt+1~9)
- 按下快捷键直接切换到对应风格,而非循环切换
- 如果对应槽位无风格绑定则无操作
- 切换后托盘菜单同步更新选中状态
二、Bug 修复:托盘右键菜单输出风格问题
问题 1 —— 托盘菜单仅展示 4 个内置 PolishMode,不显示自定义/导入风格包:
tray_polish_mode_menu_entries()(lib.rs:770-785)硬编码了 4 个条目(Raw/Light/Structured/Formal),未读取用户已启用的自定义风格包列表。build_style_tray_menu()(lib.rs:825-845)的 selected 通过 pack.base_mode 而非 pack.id 判断选中状态,当用户有多个同 base_mode 的自定义风格包时,菜单勾选状态会错乱。
问题 2 —— 托盘切换风格始终激活内置包,丢失自定义包:
handle_style_tray_menu_event()(lib.rs:1040-1053)调用 activate_builtin_style_mode(),该函数只激活 builtin.* 系列的内置风格包。如果用户当前使用的是从风格市场导入的自定义包(如 imported.xxx),通过托盘切换后会"回退"到内置包,无法再通过托盘切回自定义包。这可能也是 #742(风格选择会自动回到正式表达)的根因之一。
问题 3 —— 切换风格后托盘菜单刷新的日志/函数名不准确:
switch_to_previous_style()(hotkey_loops.rs:869)中调用 refresh_tray_microphone_menu 来重建整个托盘菜单(包括风格子菜单),功能上可行但函数名只字不提 style,容易误导维护者。建议重命名为 refresh_tray_menu 或拆出独立的 refresh_tray_style_menu。
涉及改动:
lib.rs: tray_polish_mode_menu_entries() 改为读取 style_packs().list() 中所有 enabled 的自定义包
lib.rs: build_style_tray_menu() 使用 pack.id 判断选中状态
lib.rs: handle_style_tray_menu_event() 改为通过 pack.id 而非 PolishMode 定位并激活风格包
lib.rs: 函数重命名 refresh_tray_microphone_menu → refresh_tray_menu(可选,拆为独立 PR)
受影响文件
| 文件 |
相关行 |
src-tauri/src/types.rs |
22-42 (PolishMode), 311-336 (StylePack), 584-688 (UserPreferences), 1307-1312 (default shortcut) |
src-tauri/src/lib.rs |
762-845 (tray style menu), 1040-1053 (tray handler) |
src-tauri/src/coordinator/hotkey_loops.rs |
831-875 (switch_to_previous_style) |
src-tauri/src/coordinator.rs |
340-344 (ActionHotkeyKind) |
src-tauri/src/commands/hotkeys.rs |
73-101 (set_switch_style_hotkey) |
src-tauri/src/commands/style_packs.rs |
3-10 (refresh_tray_menu_async) |
app/src/pages/settings/ShortcutsSection.tsx |
118-143 (settings UI) |
app/src/lib/ipc/hotkeys.ts |
67-69 (IPC bridge) |
app/src/lib/hotkey.ts |
17-23 (defaults) |
上下文
问题概述
一、功能请求:增加风格快捷键 Alt+1~9
现状:
当前仅支持一个"切换到上一个风格"的全局快捷键(默认
Ctrl+Shift+S),对应函数switch_to_previous_style()(hotkey_loops.rs:831),只能向后循环切换启用的风格包(style packs)。在coordinator.rs:340-344中ActionHotkeyKind仅有SwitchStyle和OpenApp两种。需求:
支持
Alt+1~Alt+9快速切换到对应的第 1~9 个已启用风格包(按列表顺序),类似浏览器标签页切换的 UX 模式。涉及改动:
types.rs: 在UserPreferences中增加 9 个 style shortcut 字段,每个可绑定一个 style pack IDhotkey_loops.rs: 增加switch_to_style_by_index()函数,从ActionHotkeyKind扩展或新增 hotkey 注册commands/hotkeys.rs: 增加后端绑定/解绑接口ShortcutsSection.tsx: 前端快捷键设置 UI 展示 9 个风格槽位style-packs.ts: 前端 IPC 桥接期望行为:
二、Bug 修复:托盘右键菜单输出风格问题
问题 1 —— 托盘菜单仅展示 4 个内置 PolishMode,不显示自定义/导入风格包:
tray_polish_mode_menu_entries()(lib.rs:770-785)硬编码了 4 个条目(Raw/Light/Structured/Formal),未读取用户已启用的自定义风格包列表。build_style_tray_menu()(lib.rs:825-845)的selected通过pack.base_mode而非pack.id判断选中状态,当用户有多个同 base_mode 的自定义风格包时,菜单勾选状态会错乱。问题 2 —— 托盘切换风格始终激活内置包,丢失自定义包:
handle_style_tray_menu_event()(lib.rs:1040-1053)调用activate_builtin_style_mode(),该函数只激活builtin.*系列的内置风格包。如果用户当前使用的是从风格市场导入的自定义包(如imported.xxx),通过托盘切换后会"回退"到内置包,无法再通过托盘切回自定义包。这可能也是 #742(风格选择会自动回到正式表达)的根因之一。问题 3 —— 切换风格后托盘菜单刷新的日志/函数名不准确:
switch_to_previous_style()(hotkey_loops.rs:869)中调用refresh_tray_microphone_menu来重建整个托盘菜单(包括风格子菜单),功能上可行但函数名只字不提 style,容易误导维护者。建议重命名为refresh_tray_menu或拆出独立的refresh_tray_style_menu。涉及改动:
lib.rs:tray_polish_mode_menu_entries()改为读取style_packs().list()中所有enabled的自定义包lib.rs:build_style_tray_menu()使用pack.id判断选中状态lib.rs:handle_style_tray_menu_event()改为通过pack.id而非PolishMode定位并激活风格包lib.rs: 函数重命名refresh_tray_microphone_menu→refresh_tray_menu(可选,拆为独立 PR)受影响文件
src-tauri/src/types.rssrc-tauri/src/lib.rssrc-tauri/src/coordinator/hotkey_loops.rssrc-tauri/src/coordinator.rssrc-tauri/src/commands/hotkeys.rssrc-tauri/src/commands/style_packs.rsapp/src/pages/settings/ShortcutsSection.tsxapp/src/lib/ipc/hotkeys.tsapp/src/lib/hotkey.ts上下文
ActionHotkeyKind::SwitchStyle仅支持单个快捷键、仅向后循环tray_style_menu_enabled()返回true)