Standardize picker default actions, Ctrl mappings, and close semantics #610

Closed
opened 2026-05-06 03:04:12 +00:00 by barrettruth · 0 comments
Owner

Audit and standardize the picker action contract across root, PR, issue, CI runs, nested checks, and releases.

Current drift:

  • default actions are hard-bound to <cr>, but release has no default action; its browse action is configured to <cr>.
  • Issue and release <cr> currently open in the browser and keep the picker open.
  • PR, CI, checks, and root <cr> generally close the current picker or replace/nest into another surface.
  • Ctrl mappings mostly keep the picker open for side effects, but there are intentional exceptions: checks navigation, create/edit, filter, refresh, and back.
  • keys.ci.open exists in config but is not actually consumed by the picker action mapper.

Proposed contract to decide:

  • <cr> is reserved for the primary/default action.
  • Default actions should close the current picker, or replace/nest into another picker/surface.
  • Browser-open behavior should be available as a secondary action, normally Ctrl-X (<c-x>), and should keep the picker open.
  • Ctrl-key side-effect actions should keep the picker open by default.
  • Explicit exceptions must be documented: filter/refresh relaunches, nested picker navigation, create/edit compose flows, and back.
  • Load-more rows are a special case and may keep the picker open even for default actions.

Acceptance criteria:

  • Document the standard action contract in vimdoc.
  • Align PR, issue, CI, nested checks, release, and root picker definitions with that contract.
  • Decide whether keys.ci.open should be implemented, renamed, documented, or removed.
  • Add tests that assert visible header actions, hidden active mappings, <cr> behavior, and close/keep-open semantics per picker.
  • Leave #609 to implement the release-specific binding only after this contract is settled.

Residual questions:

  • Whether issue <cr> should still browse but close afterward, or whether issue needs a different primary action.
  • Whether release should gain a true default action plus separate browse, or whether browse should be renamed/rebound.
  • Whether create/edit/checks navigation count as acceptable Ctrl-key exceptions under the keep-open rule.
Audit and standardize the picker action contract across root, PR, issue, CI runs, nested checks, and releases. Current drift: - `default` actions are hard-bound to `<cr>`, but release has no `default` action; its `browse` action is configured to `<cr>`. - Issue and release `<cr>` currently open in the browser and keep the picker open. - PR, CI, checks, and root `<cr>` generally close the current picker or replace/nest into another surface. - Ctrl mappings mostly keep the picker open for side effects, but there are intentional exceptions: checks navigation, create/edit, filter, refresh, and back. - `keys.ci.open` exists in config but is not actually consumed by the picker action mapper. Proposed contract to decide: - `<cr>` is reserved for the primary/default action. - Default actions should close the current picker, or replace/nest into another picker/surface. - Browser-open behavior should be available as a secondary action, normally Ctrl-X (`<c-x>`), and should keep the picker open. - Ctrl-key side-effect actions should keep the picker open by default. - Explicit exceptions must be documented: filter/refresh relaunches, nested picker navigation, create/edit compose flows, and back. - Load-more rows are a special case and may keep the picker open even for default actions. Acceptance criteria: - Document the standard action contract in vimdoc. - Align PR, issue, CI, nested checks, release, and root picker definitions with that contract. - Decide whether `keys.ci.open` should be implemented, renamed, documented, or removed. - Add tests that assert visible header actions, hidden active mappings, `<cr>` behavior, and close/keep-open semantics per picker. - Leave #609 to implement the release-specific binding only after this contract is settled. Residual questions: - Whether issue `<cr>` should still browse but close afterward, or whether issue needs a different primary action. - Whether release should gain a true `default` action plus separate `browse`, or whether `browse` should be renamed/rebound. - Whether create/edit/checks navigation count as acceptable Ctrl-key exceptions under the keep-open rule.
barrettruth changed title from Standardize hidden picker mappings and discoverability to Standardize picker default actions, Ctrl mappings, and close semantics 2026-05-06 03:15:20 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
barrettruth/forge.nvim#610
No description provided.