Skip to content

[Bug] macOS:⌘K 解绑/改绑后仍是 Shell 选择器,且 ⌘Q 无法退出 #238

Description

@zhbjerry
  • Operating system: macOS 26.6.2 (arm64)
  • Nebula / Pebrel version: 1.8.2(GitHub Release 安装)
  • Affected area: Settings / backup / sync(按键映射),UI / layout / rendering(键帽显示)

Steps to reproduce

  1. macOS 上打开 Pebrel 1.8.2。
  2. 设置 → 按键映射 → 「Shell 选择器」一行显示的是 Ctrl+K
  3. 直接按 ⌘K:弹出 Shell 选择器,而不是终端惯用的清屏。
  4. 用 Backspace / 清除按钮把这一行解绑。
  5. 再给这一行录一个新键(例如 ⌘⇧K)。

Expected behavior

  • 解绑后 ⌘K 不再触发 Shell 选择器,⌘K 归还给终端 / 系统语义。
  • 改绑后只有新键触发该动作。
  • ⌘Q 退出应用(macOS 上这是最常用的退出键)。

Actual behavior

  • 第 4 步解绑后按 ⌘K,Shell 选择器照样弹出
  • 第 5 步改绑后,新键和 ⌘K 两个键都会弹出 Shell 选择器
  • ⌘Q 完全没反应,无法退出应用。

本机 pebrel_settings.txt 的实际内容(可复现的存档状态)

keybind=Ctrl+Win+F:ReceiveChar
keybind=Ctrl+K:ReceiveChar
keybind=shift+win+k:ReceiveChar

这三行正好对应「解绑了 Shell 选择器(Ctrl+K)→ 录了 ⌘⇧K → 又解绑 → 顺带解绑了全屏」。也就是说解绑动作已经落盘了,但运行时没有生效。

代码层面的定位(可能的原因)

  1. nebula_app/src/gpui_shell/workspace/keyboard_bindings.rsbind_macos_command_keys(135-166 行)在 init()追加注册了一整套 ⌘ 静态绑定,其中 KeyBinding::new("cmd-k", ToggleShellPicker, None)(144 行)。这套绑定不在 display::keymap 的默认表 default_shortcuts() 里。
  2. 设置页的显示(effective_combo)、解绑(clear_actiondisplay/keymap.rs:120)和运行时重注入(update_keybindskeyboard_bindings.rs:264)都只以 default_shortcuts() 为准。因为 ⌘ 层不在这张表里:
    • 设置页只能反查到 config/bindings/defaults.rs:212"k", ctrl; Action::ToggleShellPicker,所以显示 Ctrl+K,⌘K 既不可见也解不掉;
    • 解绑只会给 ctrl-kReceiveChar,⌘K 的静态绑定没有任何机制去释放它。
  3. 同一处 bind_macos_command_keys 里没有 cmd-q;而 config::Action::Quitworkspace_binding_in_context(210-257 行)的 match 里落到 _ => None,所以 GPUI 壳从未注册退出快捷键(旧壳 input/action.rs:226 是有的),config/bindings/defaults.rs:378⌘Q → Quit 对 GPUI 壳不生效。
  4. 另外键帽显示也不对:display/keymap.rs:307mods_prefix 把 SUPER 一律渲染成 Win+,所以 macOS 设置页会出现 Ctrl+Win+F(全屏)、Win+F(搜索)这类键帽,用户看不到 ⌘。

Environment

  • macOS 26.6.2 (25G83), arm64, zsh

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions