Skip to content

Optimized the interaction of shortcut key modifications#49

Merged
landaiqing merged 1 commit into
masterfrom
dev
Apr 13, 2026
Merged

Optimized the interaction of shortcut key modifications#49
landaiqing merged 1 commit into
masterfrom
dev

Conversation

@landaiqing

@landaiqing landaiqing commented Apr 13, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

发布说明

  • 新增功能
    • 添加了键盘快捷键录制功能,用户可通过按键快速录制新的快捷键组合
    • 新增单个快捷键重置功能,可将特定快捷键恢复至默认设置
    • 在主题颜色选择器中新增本地化的颜色标签显示,支持英文和中文
    • 改进了快捷键冲突检测机制,提供更清晰的冲突提示

Comment thread frontend/bindings/voidraft/internal/services/keybindingservice.ts
@coderabbitai

coderabbitai Bot commented Apr 13, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

总体概览

本次变更为键盘快捷键功能引入了一个新的 composable useKeyRecorder,用于动态记录用户的键盘输入,并在后端服务和前端绑定中添加了 ResetSingleKeyBinding 功能以重置单个快捷键。同时更新了国际化文本和相关组件的实现。

变更详情

快捷键功能 变更摘要
键盘记录 Composable
frontend/src/composables/useKeyRecorder.ts, frontend/src/composables/index.ts
新增 Vue composable useKeyRecorder,实现键盘事件监听、修饰符键规范化、按键显示映射等功能。支持录制开始/停止、冲突检测和完成/取消回调。通过 barrel export 暴露 KeyRecorderStateUseKeyRecorderOptionsUseKeyRecorderReturn 类型。
快捷键页面重构
frontend/src/views/settings/pages/KeyBindingsPage.vue
将原有的手动输入编辑流程(逐个按键添加/移除)替换为基于 useKeyRecorder 的单次录制工作流。新增待定结果状态以展示冲突检测,并实现 toggleRecordingconfirmSaveresetSingleKey 等操作。模板结构优化为紧凑的 <kbd> 显示加操作按钮。
后端服务
internal/services/keybinding_service.go
添加 ResetSingleKeyBinding 方法,通过绑定 ID 获取记录,查找对应默认配置,并更新其所有平台(macOS/Windows/Linux)及作用域的按键设置。
服务绑定
frontend/bindings/voidraft/internal/services/keybindingservice.ts
新增导出函数 ResetSingleKeyBinding(id: number) 绑定后端服务调用。
国际化文本
frontend/src/i18n/locales/en-US.ts, frontend/src/i18n/locales/zh-CN.ts
替换快捷键相关文本(移除 keyPlaceholderinvalidFormatconflictmaxKeysReached;新增 saveFailedresetSingleconfirmSaveconflictWith)。在 settings 下新增 themeColors 对象,包含编辑器 UI 及语法高亮相关的颜色标签。
外观页面
frontend/src/views/settings/pages/AppearancePage.vue
扩展 useI18n() 析构以支持 te 函数。更新 colorList 以从 i18n 中动态获取颜色标签,并扩展搜索逻辑以匹配标签和按键。

序列图

sequenceDiagram
    actor User
    participant KeyBindingsPage as KeyBindingsPage<br/>Component
    participant useKeyRecorder as useKeyRecorder<br/>Composable
    participant KeyRecorder as KeyboardListener<br/>Events
    participant Backend as KeyBinding<br/>Service
    participant DB as Database

    User->>KeyBindingsPage: 点击快捷键条目
    KeyBindingsPage->>useKeyRecorder: 调用 startRecording(bindingId)
    useKeyRecorder->>KeyRecorder: 注册 keydown/keyup 监听
    useKeyRecorder->>KeyBindingsPage: 更新 isRecording 状态

    User->>KeyRecorder: 按下修饰键 (Shift/Ctrl)
    KeyRecorder->>useKeyRecorder: onKeyDown 事件
    useKeyRecorder->>useKeyRecorder: 规范化修饰符,更新显示
    useKeyRecorder->>KeyBindingsPage: 反应式更新 recordedParts

    User->>KeyRecorder: 按下普通键 (e.g., 'k')
    KeyRecorder->>useKeyRecorder: onKeyDown 事件
    useKeyRecorder->>useKeyRecorder: 记录完整按键组合<br/>生成 keyString
    useKeyRecorder->>useKeyRecorder: 检测与已启用快捷键的冲突
    useKeyRecorder->>useKeyRecorder: 清理监听器,调用 onComplete
    useKeyRecorder->>KeyBindingsPage: 返回 pendingResult<br/>(bindingId, newKey, conflict)

    KeyBindingsPage->>KeyBindingsPage: 显示确认/重置按钮<br/>和冲突警告(如有)

    User->>KeyBindingsPage: 点击确认保存
    KeyBindingsPage->>Backend: 调用 updateKeyBinding<br/>(id, newKey)
    Backend->>DB: 更新快捷键记录
    DB-->>Backend: 确认更新
    Backend-->>KeyBindingsPage: 返回成功

    User->>KeyBindingsPage: 点击重置单个快捷键
    KeyBindingsPage->>Backend: 调用 ResetSingleKeyBinding(id)
    Backend->>DB: 查询默认配置并更新
    DB-->>Backend: 确认重置
    Backend-->>KeyBindingsPage: 返回成功
    KeyBindingsPage->>KeyBindingsPage: 重新加载快捷键设置
Loading

代码审查工作量

🎯 4 (复杂) | ⏱️ ~50 分钟

相关 PR

  • PR #20: 修改 NewDefaultKeyBindings 以支持新的快捷键类型,与本 PR 中使用默认配置进行重置操作直接相关。
  • PR #18: 修改快捷键服务 API 和前端绑定,本 PR 中新增的 ResetSingleKeyBinding 绑定与该 PR 的服务重构保持一致。

建议标签

enhancement

诗歌

🐰 键盘舞动如兔足,
快捷键录制显身手,
冲突检测助安宁,
一键重置返原处,
界面焕新伴i18n,
用户体验更顺畅!✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 60.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive 标题「优化了快捷键修改的交互」与变更集内容部分相关,但表述过于宽泛,未能准确反映此次更改的主要目标。 建议使用更具体的标题,如「实现快捷键录制功能与重置功能」或「添加键盘快捷键录制与重置机制」,以更准确地描述所有关键变更。
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
31.0% Duplication on New Code (required ≤ 3%)

See analysis details on SonarQube Cloud

@coderabbitai coderabbitai Bot added the enhancement New feature or request label Apr 13, 2026
@landaiqing landaiqing merged commit 67de44b into master Apr 13, 2026
8 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant