Skip to content

feat(client): leader s/w navigation pickers + scored, grouped command palette#141

Merged
phall1 merged 1 commit into
mainfrom
feat/nav-sessions-windows-palette
Jun 17, 2026
Merged

feat(client): leader s/w navigation pickers + scored, grouped command palette#141
phall1 merged 1 commit into
mainfrom
feat/nav-sessions-windows-palette

Conversation

@phall1

@phall1 phall1 commented Jun 17, 2026

Copy link
Copy Markdown
Owner

What

Under the C-a leader:

  • s opens a picker over all sessions (session-picker); choosing one re-attaches this client in-process via switch-session. A trailing "+ New session" row creates one.
  • w opens a hierarchical window picker grouped by session: each session is a non-selectable header with its windows nested beneath. Selecting a window in the current session switches to it (select-window); selecting another session switches to it (switch-session) — its windows then list under its own picker.
  • a stays a session-picker alias for muscle memory. No binding is left silently dead.

Command palette

  • Scored fuzzy ranking. Matches are ranked best-first using contiguous-run, word-boundary/prefix, and earliness bonuses, so typing sp floats split-pane to the top.
  • Category grouping. With an empty query, rows group under dim section headers — Pane / Window / Session / View. Headers fall away once a query narrows the list (a filtered view is a flat best-first ranking). Navigation and Enter skip header rows.
  • Inline chord hints are preserved.

Bug fix

  • Fix a usize underflow in the contiguous-run bonus when a match lands at index 0.

Docs

Made docs/consumers/tui.md and docs/CONFIG.md accurate to the shipped code:

  • Corrected the prefix to C-a (was the stale ctrl+space) everywhere, including the defaults table and first-time-use walkthrough.
  • Realigned the keybinding and action catalogs with the actual dispatcher (ACTION_NAMES) and the shipped default.toml bindings.
  • Fixed the status-bar widget kinds to the ones actually implemented (session-name, time, windows) — the docs previously advertised nonexistent session / clock kinds.
  • Removed the nonexistent phux config reload verb (the shipped subcommands are init / path / show); edits apply on client restart.
  • Re-scoped the hooks section as schema-only / design-intent (no hooks ship in default.toml).

Tests

  • select_list: scored-match (sp -> split-pane first), empty-needle, non-subsequence, word-boundary, stable-tie ranking; header drop-out under filtering; navigation/Enter skipping headers.
  • action_registry: category headers in order, every row indented under a header, every registry action carries an in-order category.
  • input_dispatch: window picker groups windows under their session, foreign sessions render a switch-session row.
  • keybind: shipped-default resolver test for C-a s / C-a w / C-a a.

Local CI

just ci is green (fmt + lint + 1553 tests + deny + docs-check).

🤖 Generated with Claude Code

… palette

Under the C-a leader, `s` opens a picker over all sessions and `w` opens
a hierarchical picker over all windows grouped by session: each session is
a non-selectable header with its windows nested beneath. Selecting a
window in the current session switches to it (`select-window`); selecting
another session switches to it (`switch-session`). `a` stays a
session-picker alias for muscle memory.

The command palette now scores its fuzzy match (contiguous-run,
word-boundary, and earliness bonuses) and ranks matches best-first, so
typing `sp` floats `split-pane` to the top. With an empty query rows group
under dim category section headers (Pane / Window / Session / View);
headers fall away once a query narrows the list. Navigation and Enter skip
header rows. Inline chord hints are preserved.

Fix a usize underflow in the run bonus when a match lands at index 0.

Docs: make tui.md and CONFIG.md accurate to the shipped code — correct the
prefix (C-a, not ctrl+space), realign the keybinding and action catalogs
with the dispatcher, fix the shipped widget kinds (session-name / time /
windows, not session / clock), and drop the nonexistent `phux config
reload` verb in favor of restart-to-apply.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@phall1 phall1 force-pushed the feat/nav-sessions-windows-palette branch from 8df54f2 to 94e10b3 Compare June 17, 2026 20:49
@phall1 phall1 merged commit 59686cb into main Jun 17, 2026
3 checks passed
@phall1 phall1 deleted the feat/nav-sessions-windows-palette branch June 17, 2026 21:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant