feat(tui): make turn interruption keybind configurable (#24766)

## Why

Interrupting an active turn is currently fixed to `Esc`, which is easy
to hit accidentally and cannot be customized through `/keymap`. This
gives users a less accidental binding while preserving the existing
default.

## What Changed

- Adds `tui.keymap.chat.interrupt_turn` to `/keymap`, defaulting to
`esc` and supporting remapping or unbinding.
- Uses the configured interrupt binding for running-turn status, queued
steer interruption, and `request_user_input`, including the visible
hints.
- Preserves local `Esc` behavior for popups, Vim insert mode, and
`/agent` editing while validating conflicts with fixed/backtrack and
request-input navigation bindings.
- Adds behavior and snapshot coverage for remapped interruption paths.

## How to Test

1. Run Codex and open `/keymap`, then set **Interrupt Turn** to `f12`.
2. Start a turn and confirm `Esc` no longer interrupts it while `f12`
does; the running hint should display `f12 to interrupt`.
3. Queue a steer while a turn is running and confirm the preview
displays `f12`; pressing it should interrupt and submit the steer
immediately.
4. Trigger a `request_user_input` prompt and confirm its footer uses
`f12`; with notes open, `Esc` should still clear notes while `f12`
interrupts the turn.
5. Clear the Interrupt Turn binding and confirm the key-specific
interrupt hint is removed while `Ctrl+C` remains available.

Targeted validation:

- `just write-config-schema`
- `just fix -p codex-config`
- `just fix -p codex-tui`
- `just fmt`
- `just argument-comment-lint-from-source -p codex-config -p codex-tui`
- `just test -p codex-config`
- `cargo insta pending-snapshots --manifest-path tui/Cargo.toml`
- `just test -p codex-tui keymap_setup::tests`
- `just test -p codex-tui` (fails in two pre-existing guardian
feature-flag tests unrelated to this diff; the intentional picker
snapshot updates were reviewed and accepted)
This commit is contained in:
Felipe Coury
2026-05-27 18:59:17 +00:00
committed by GitHub
parent 8d398d3c52
commit 2d1ad374a7
21 changed files with 352 additions and 42 deletions
+12 -2
View File
@@ -2766,7 +2766,8 @@
"chat": {
"decrease_reasoning_effort": null,
"edit_queued_message": null,
"increase_reasoning_effort": null
"increase_reasoning_effort": null,
"interrupt_turn": null
},
"composer": {
"history_search_next": null,
@@ -3094,6 +3095,14 @@
}
],
"description": "Increase the active reasoning effort."
},
"interrupt_turn": {
"allOf": [
{
"$ref": "#/definitions/KeybindingsSpec"
}
],
"description": "Interrupt the active turn."
}
},
"type": "object"
@@ -3405,7 +3414,8 @@
"default": {
"decrease_reasoning_effort": null,
"edit_queued_message": null,
"increase_reasoning_effort": null
"increase_reasoning_effort": null,
"interrupt_turn": null
}
},
"composer": {