Repository navigation
feat: add layered keybindings with help and key hints - #1
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by mau
Before: a Relay Shell application had to read the keyboard with Ink's
useInputin every component, so two components could react to the same key and there was no way to list what the keys do.After:
KeymapProviderreads the keyboard once and routes each key to one binding. Components declare keys withuseKeybindings,?opens a grouped keyboard reference (HelpOverlay), andKeyHintsprints one line of the most relevant keys.Bindings live on layers (global, pane, overlay). Higher layers are asked first, the newest set wins within a layer, a handler can return
falseto pass a key on, anexclusiveset blocks lower layers (dialogs), and afallbackreceives unmatched keys (text fields).How: key specs such as
ctrl+s,shift+tab, andpagedownare parsed into chords and compared with what Ink reports.KeyRegistryholds the active sets and only notifies the UI when the listed bindings change, so inline handlers do not cause re-render loops. Guide indocs/keyboard.md, with tests.