Skip to content

feat(tui): standardize picker navigation keys#22347

Merged
fcoury-oai merged 7 commits into
mainfrom
fcoury/std-picker-keys
May 13, 2026
Merged

feat(tui): standardize picker navigation keys#22347
fcoury-oai merged 7 commits into
mainfrom
fcoury/std-picker-keys

Conversation

@fcoury-oai

Copy link
Copy Markdown
Contributor

Why

Picker-style UI in the TUI has accumulated a mix of hardcoded navigation keys. Some lists supported page movement, some did not; some accepted Vim-like keys, while others only accepted arrows; and tabbed or horizontally adjustable pickers had no shared keymap action for left/right movement.

This PR makes picker/list navigation consistent and configurable so users can rely on the same defaults across the TUI.

What Changed

  • Adds shared list keymap actions for:
    • vertical movement: move_up, move_down
    • horizontal movement: move_left, move_right
    • paging and jumps: page_up, page_down, jump_top, jump_bottom
  • Adds defaults:
    • Up/down: arrows, Ctrl+P/N, Ctrl+K/J, and plain k/j where text input is not active
    • Page up/down: PageUp/PageDown and Ctrl+B/F
    • First/last: Home/End
    • Left/right: Left/Right and Ctrl+H/L
  • Wires the shared list keymap through picker and list surfaces including session resume, multi-select, tabbed selection lists, settings-style lists, app-link selection, MCP elicitation, request-user-input, and the OSS selection wizard.
  • Keeps search behavior intact by reserving printable characters for query text in searchable pickers.
  • Updates keymap setup actions, config schema, snapshots, and focused coverage for the new list actions.

How to Test

  1. Start Codex from this branch and open the session picker, for example with an existing session history.
  2. In the session list, verify that Ctrl+J/K moves the selection down/up.
  3. Verify that Ctrl+F/B pages down/up and Home/End jumps to the first/last visible session.
  4. Type printable search text such as j or k and confirm it updates the query instead of navigating.
  5. Focus a picker control that changes values horizontally, such as a session picker toolbar control, and verify Ctrl+H/L changes the focused value like left/right arrows.

Targeted tests run:

  • cargo test -p codex-tui keymap::tests::
  • cargo test -p codex-tui keymap_setup::tests::
  • cargo test -p codex-tui horizontal_list_keys
  • cargo test -p codex-tui page_and_jump_navigation_use_list_keymap
  • cargo test -p codex-tui ctrl_h_l_move_provider_selection
  • cargo test -p codex-tui scroll_state::tests
  • cargo test -p codex-tui switching_tabs_changes_visible_items_and_clears_search
  • cargo test -p codex-tui toggle_sort_key_reloads_with_new_sort

Also ran just write-config-schema, just fmt, just fix -p codex-tui, just argument-comment-lint, and git diff --check.

Note: cargo test -p codex-tui was attempted and still aborts in the pre-existing tests::fork_last_filters_latest_session_by_cwd_unless_show_all stack overflow, which is unrelated to this branch.

@fcoury-oai fcoury-oai requested a review from a team as a code owner May 12, 2026 16:04

@canvrno-oai canvrno-oai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Smoke tested in TUI client, did not observe any issues.

@etraut-openai etraut-openai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The config code (in core) looks fine.

@fcoury-oai fcoury-oai enabled auto-merge (squash) May 13, 2026 15:10
@fcoury-oai fcoury-oai merged commit 3d517fb into main May 13, 2026
27 checks passed
@fcoury-oai fcoury-oai deleted the fcoury/std-picker-keys branch May 13, 2026 15:33
@github-actions github-actions Bot locked and limited conversation to collaborators May 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants