Keyboard Shortcuts: make “Add another shortcut” explicit and discoverable

Open 💬 0 comments Opened Jun 12, 2026 by 0xdevalias

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:

  1. Hover a command's shortcut row to reveal the edit button.
  2. Hold Shift.
  3. Shift-click the edit button.
  4. 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 append keybinding 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:

  1. .vite/build/src-K8ZToA-n.js
  • Parses keybindings.json as repeated { command, key } entries.
  • Returns every non-null key assigned to a command.
  • Implements append, replace, and remove update types.
  • The append update persists the existing accelerators plus the newly captured accelerator.
  1. 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 replace to append only when event.shiftKey is 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.

  1. 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.

  1. .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.

  1. 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

View original on GitHub ↗