feat(tui): command palette with fuzzy search #53
No reviewers
Labels
No labels
area:agents
area:ai
area:config
area:dashboard
area:design
area:design-review
area:devtools
area:entities
area:gallery
area:generate
area:image
area:infra
area:meta
area:model-browser
area:navigation
area:presets
area:security
area:sessions
area:settings
area:sharing
area:test
area:ux
area:webhook
area:workdir
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/loom!53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "tui/palette-18"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Sixth PR in the loom-tui stack. Adds a command palette overlay backed by
nucleo-matcher.Stacks on #52. Closes charles/loom#18.
What's in
components::palette::PaletteAction— id + human name + scope + current bindingcomponents::palette::build_registry— walksKeyMap::iter()so displayed bindings reflect whatever overridestui.tomlappliedcomponents::palette::filter— nucleo-matcher scoring; empty query returns all actions alphabeticallycomponents::palette::PaletteState— push/pop/clear query, select next/prev with clamping,currentaccessorPaletteOverlayinapp.rs— wrapsPaletteState, handles Esc/Enter/arrow keys/Backspace/Ctrl+U/printable chars, swallows everything else so underlying screens don't see inputAppAction::InvokeAction(ActionId)— new variant so the overlay can enqueue a keybind firing for the next tick;drain_actionsroutes it throughinvoke_actionAPP_PALETTEaction now pushes the palette overlay (:orCtrl+P)componentspromoted to a directory:components/mod.rs(sidebar, status bar, layout) +components/palette.rsTests (5 new, 32 total)
"gallery"ranks a gallery action firstquery()Notes
PaletteOverlay::handlereturnstruefor every key event — the overlay is modal and should never leak input to the underlying screenquery()is#[cfg(test)]-only since nothing else reads it externally today