Keyboard Shortcuts: make “Add another shortcut” explicit and discoverable
What variant of Codex are you using?
App (Codex Desktop)
What feature would you like to see?
Please make assigning multiple keyboard shortcuts to one command explicit and discoverable in Settings > Keyboard Shortcuts.
Codex Desktop already supports multiple bindings per command in ~/.codex/keybindings.json, and the current settings implementation can append another binding. However, the UI exposes this through a hidden gesture:
- Hover a command's shortcut row to reveal the edit button.
- Hold Shift.
- Shift-click the edit button.
- Enter the additional shortcut.
Without Shift, the same button replaces the existing shortcut. Holding Shift changes the action to Create new shortcut, but there is no persistent affordance or documentation indicating that this gesture exists.
Please expose this as a normal visible action, for example:
- an Add shortcut button beside each command;
- an action menu containing Change shortcut, Add another shortcut, Remove shortcut, and Reset to default; or
- a visible plus button after the existing shortcut rows.
Each assigned shortcut should remain independently removable and editable, as the existing multi-row UI already supports.
Additional information
This is primarily a discoverability and usability request, not a request for a new keymap format or backend capability. The current app already:
- stores multiple bindings as repeated entries with the same
command; - supports an internal
appendkeybinding update; - displays multiple shortcut rows;
- removes individual bindings.
Packaged implementation evidence
I extracted the installed archive with:
npx --yes @electron/asar extract \
/Applications/Codex.app/Contents/Resources/app.asar \
/private/tmp/codex-app-asar-26.608.12217
SHA-256 hashes for the installed archive and relevant extracted chunks:
4545a5b9cc1e244254f444a611f21c49f4f997cb158bab7a2d7397f6954079df app.asar
3ac681adae4e3251f708b02c8a643f343b04f4aee648d721a20d572499e40b87 .vite/build/src-K8ZToA-n.js
7a02dc7d099958484831a6bce0ef0c9bed847358a6e56354d27573ad8734168a .vite/build/main-CIL4OHS5.js
d644d0868b6b9ab3cb78045445988b5cc5e966fa23150c961cf64ba44604b444 webview/assets/command-keybindings-aiKFUHFn.js
8e1e44ab185eb1f0d75f3e36972ee11fbeed0f5267990d02f6f3b6babc2016f2 webview/assets/keyboard-shortcuts-settings-BdpA6Kcu.js
795854cdab7c3d9e7061d1e776a62bd7b556505db588da92d1e98bcccfbcaf3e webview/assets/electron-menu-shortcuts-MJ7p3xz1.js
The relevant implementation details are:
.vite/build/src-K8ZToA-n.js
- Parses
keybindings.jsonas repeated{ command, key }entries. - Returns every non-null key assigned to a command.
- Implements
append,replace, andremoveupdate types. - The
appendupdate persists the existing accelerators plus the newly captured accelerator.
webview/assets/keyboard-shortcuts-settings-BdpA6Kcu.js
This chunk already implements the full multi-binding settings workflow:
- maps every shortcut entry for a command into a separate table row;
- adds a blank capture row while the edit state has
mode === "append"; - sends
{ type: "append", accelerator }when that row captures a shortcut; - removes individual accelerators with
{ type: "remove", accelerator }; - changes the edit-button action from
replacetoappendonly whenevent.shiftKeyis true.
Its accessible tooltip/label also changes from:
``text``
Change shortcut for {commandTitle}
to:
``text``
Create new shortcut for {commandTitle}
but only while Shift is held during hover/mouse movement. The edit button itself is also visually hidden until the row is hovered or focused.
This confirms that “Add another shortcut” is an existing but gesture-hidden capability, rather than a missing backend feature.
webview/assets/command-keybindings-aiKFUHFn.js
Requests codex-command-keymap-state and maps all effective accelerators into displayed shortcut entries. The query has a one-minute stale time.
.vite/build/main-CIL4OHS5.js
Exposes the codex-command-keymap-state, set-codex-command-keybinding, and reset-codex-command-keybindings RPC handlers. Successful updates refresh the application menu and browser-sidebar command accelerators.
webview/assets/electron-menu-shortcuts-MJ7p3xz1.js
Supplies shared command/default-binding metadata and accelerator formatting/resolution used by the settings UI.
Taken together, the packaged implementation already supports assigning, displaying, and removing multiple shortcuts. The requested change is to expose the existing append operation through a persistent, ordinary UI affordance rather than an undocumented Shift-hover/Shift-click state.
The missing part is a visible way for users to discover and invoke Add another shortcut without knowing the undocumented Shift-click gesture.
The official Keyboard Shortcuts documentation currently says users can review, change, or reset bindings, but does not explain that multiple bindings can be assigned or how to add one.
See Also
A separate runtime bug exists where some native-menu commands only activate the first configured binding. The UI should still expose multiple assignment clearly, while that runtime inconsistency is fixed separately:
- #27834
Related but not duplicate:
- #3049
- general configurable hotkeys request for the TUI, now closed as shipped
- #17114
- desktop shortcut conflict/remapping
- #24413
- desktop shortcut remapping and discoverability