- 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
- macOS 上打开 Pebrel 1.8.2。
- 设置 → 按键映射 → 「Shell 选择器」一行显示的是
Ctrl+K。
- 直接按 ⌘K:弹出 Shell 选择器,而不是终端惯用的清屏。
- 用 Backspace / 清除按钮把这一行解绑。
- 再给这一行录一个新键(例如 ⌘⇧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 → 又解绑 → 顺带解绑了全屏」。也就是说解绑动作已经落盘了,但运行时没有生效。
代码层面的定位(可能的原因)
nebula_app/src/gpui_shell/workspace/keyboard_bindings.rs 的 bind_macos_command_keys(135-166 行)在 init() 里追加注册了一整套 ⌘ 静态绑定,其中 KeyBinding::new("cmd-k", ToggleShellPicker, None)(144 行)。这套绑定不在 display::keymap 的默认表 default_shortcuts() 里。
- 设置页的显示(
effective_combo)、解绑(clear_action,display/keymap.rs:120)和运行时重注入(update_keybinds,keyboard_bindings.rs:264)都只以 default_shortcuts() 为准。因为 ⌘ 层不在这张表里:
- 设置页只能反查到
config/bindings/defaults.rs:212 的 "k", ctrl; Action::ToggleShellPicker,所以显示 Ctrl+K,⌘K 既不可见也解不掉;
- 解绑只会给
ctrl-k 写 ReceiveChar,⌘K 的静态绑定没有任何机制去释放它。
- 同一处
bind_macos_command_keys 里没有 cmd-q;而 config::Action::Quit 在 workspace_binding_in_context(210-257 行)的 match 里落到 _ => None,所以 GPUI 壳从未注册退出快捷键(旧壳 input/action.rs:226 是有的),config/bindings/defaults.rs:378 的 ⌘Q → Quit 对 GPUI 壳不生效。
- 另外键帽显示也不对:
display/keymap.rs:307 的 mods_prefix 把 SUPER 一律渲染成 Win+,所以 macOS 设置页会出现 Ctrl+Win+F(全屏)、Win+F(搜索)这类键帽,用户看不到 ⌘。
Environment
- macOS 26.6.2 (25G83), arm64, zsh
Steps to reproduce
Ctrl+K。Expected behavior
Actual behavior
本机
pebrel_settings.txt的实际内容(可复现的存档状态)这三行正好对应「解绑了 Shell 选择器(Ctrl+K)→ 录了 ⌘⇧K → 又解绑 → 顺带解绑了全屏」。也就是说解绑动作已经落盘了,但运行时没有生效。
代码层面的定位(可能的原因)
nebula_app/src/gpui_shell/workspace/keyboard_bindings.rs的bind_macos_command_keys(135-166 行)在init()里追加注册了一整套 ⌘ 静态绑定,其中KeyBinding::new("cmd-k", ToggleShellPicker, None)(144 行)。这套绑定不在display::keymap的默认表default_shortcuts()里。effective_combo)、解绑(clear_action,display/keymap.rs:120)和运行时重注入(update_keybinds,keyboard_bindings.rs:264)都只以default_shortcuts()为准。因为 ⌘ 层不在这张表里:config/bindings/defaults.rs:212的"k", ctrl; Action::ToggleShellPicker,所以显示Ctrl+K,⌘K 既不可见也解不掉;ctrl-k写ReceiveChar,⌘K 的静态绑定没有任何机制去释放它。bind_macos_command_keys里没有cmd-q;而config::Action::Quit在workspace_binding_in_context(210-257 行)的match里落到_ => None,所以 GPUI 壳从未注册退出快捷键(旧壳input/action.rs:226是有的),config/bindings/defaults.rs:378的⌘Q → Quit对 GPUI 壳不生效。display/keymap.rs:307的mods_prefix把 SUPER 一律渲染成Win+,所以 macOS 设置页会出现Ctrl+Win+F(全屏)、Win+F(搜索)这类键帽,用户看不到 ⌘。Environment