Files
platform/todo/shell/all-keyboard-shortcuts-configurable.md
T

1.8 KiB

id, title, theme, status, created, date_source, order
id title theme status created date_source order
shell/all-keyboard-shortcuts-configurable All keyboard shortcuts configurable shell open 2026-08-22 stated 3

All keyboard shortcuts configurable. Stated 2026-08-22 as coming soon. Every binding in the app should be something the owner sets, not something the code decides.

There is nothing central to configure today. Nine separate keydown listeners are registered across the app — the code editor, the file browser and its grid and dialogs, the terminal, the chat launcher, the embeddable chat, the file viewer's editor, and Spotlight — each owning its own keys, in its own component, with no registry and no way to see the set at once. So the first half of this is an inventory, and the second is a registry the bindings are read FROM rather than written INTO the components.

Spotlight is the cautionary tale and it is already written down in Spotlight.tsx:14: the launcher went ctrl-space → shift-space → alt-space, three changes in a day, because each chord turned out to collide with something — shift-space types a space, which is why that version needed a focus check that alt-space does not. A hard-coded chord costs a code change and a release every time it is wrong, which is the argument for this item in one sentence.

Worth deciding with the config format: a binding that conflicts with another must be refused or flagged at the moment it is set, since the failure otherwise is silent and shows up as "that key does nothing". And a browser cannot claim every chord — some are the browser's or the window manager's — so the UI has to be able to say a binding was rejected by something above it.

Storage lands on todo/settings/ — this is exactly the kind of preference that should be a portable file rather than a row.