Skip to content

feat: 增加分类切换快捷键 (Alt+方向键 / Alt+F) #135

@StudentWeis

Description

@StudentWeis

Motivation

来自社区反馈 https://github.com/StudentWeis/ropy/discussions/134:用户用全局快捷键唤起 ropy 之后,要切换分类(文本 / 图片 / 文件 / 收藏)必须用鼠标点筛选条上的按钮,没有键盘快捷键。键鼠来回切换打断了快速取数的流程。

不是将收藏的内容,变成非收藏。而是过滤,过滤收藏的内容。即切到收藏界面。

注意收藏是过滤维度,不是切换当前选中项的收藏状态(后者已经用裸键 f)。

Proposed Solution

新增三个 GPUI action,注册为 app 级 bind_keys

快捷键 行为
Alt + → All → Text → Image → Files → All 之间循环到下一个分类
Alt + ← 反向循环到上一个分类
Alt + F 切换"仅收藏"过滤(与上面的内容分类正交,可组合,例如 "收藏的图片")

语义与现有 UI 一致:

  • 内容分类循环到 All 表示无过滤;
  • Alt+F 再按一次关闭收藏过滤。

实现要点:

  • 三个 action 复用现成的 toggle_content_filter / toggle_favorites_only + sync_filtered_records_and_reveal,新增一个纯函数 next_content_filter(current, forward) -> ContentFilter(TDD)。
  • src/app.rsbind_keys 注册 alt-left / alt-right / alt-f;在 src/gui/board.rs 通过 .on_action(...) 挂 handler。
  • 帮助面板 src/gui/panel/help.rs 增加对应的行,i18n key 三种语言齐备。

Alternatives Considered

  • Cmd/Ctrl + 1..4 (modifier + 数字):和 1-5 快速粘贴语义类似但不冲突;被排除是因为占用了 Cmd-命名空间且收藏切换需要单独的键。
  • Tab / Shift+Tab 循环:Input 组件在自己的 context 里把 tab / shift-tab 绑成了 IndentInline / OutdentInline(gpui-component-0.5.1/src/input/state.rs:127-128),搜索框聚焦时会被截走,体验不一致。Alt+方向键也有同类问题但收益更明显(左右二选一比循环单方向更顺手)。
  • 裸字母 (t/i/e/v 等):会与其他单键冲突(f 已用)且搜索框聚焦时不生效。

Alt + F 之所以可以在搜索框聚焦时也生效:alt-f 不在 Input 的绑定表里。

Acceptance Criteria

  • Alt + → / Alt + ← 在主列表聚焦时切换内容分类,循环顺序符合预期
  • Alt + F 切换收藏过滤,在搜索框聚焦时也生效
  • 与内容过滤组合工作(例如 "收藏的图片")
  • 单元测试覆盖 next_content_filter 的循环逻辑
  • 帮助面板列出新的快捷键,三种语言的 i18n 字符串齐备
  • scripts/precheck.sh 通过

Scope

gui

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions