mirror of
https://github.com/openai/codex.git
synced 2026-04-30 19:32:04 +03:00
fix(tui): disable double-press quit shortcut (#9220)
Disables the default Ctrl+C/Ctrl+D double-press quit UX (keeps the code path behind a const) while we rethink the quit/interrupt flow. Tests: - just fmt - cargo clippy --fix --all-features --tests --allow-dirty --allow-no-vcs -p codex-tui - cargo test -p codex-tui --lib
This commit is contained in:
@@ -71,6 +71,13 @@ pub(crate) use feedback_view::FeedbackNoteView;
|
||||
/// Keeping a single value ensures Ctrl+C and Ctrl+D behave identically.
|
||||
pub(crate) const QUIT_SHORTCUT_TIMEOUT: Duration = Duration::from_secs(1);
|
||||
|
||||
/// Whether Ctrl+C/Ctrl+D require a second press to quit.
|
||||
///
|
||||
/// This UX experiment was enabled by default, but requiring a double press to quit feels janky in
|
||||
/// practice (especially for users accustomed to shells and other TUIs). Disable it for now while we
|
||||
/// rethink a better quit/interrupt design.
|
||||
pub(crate) const DOUBLE_PRESS_QUIT_SHORTCUT_ENABLED: bool = false;
|
||||
|
||||
/// The result of offering a cancellation key to a bottom-pane surface.
|
||||
///
|
||||
/// This is primarily used for Ctrl+C routing: active views can consume the key to dismiss
|
||||
@@ -359,6 +366,10 @@ impl BottomPane {
|
||||
/// after [`QUIT_SHORTCUT_TIMEOUT`] so the hint disappears even if the user
|
||||
/// stops typing and no other events trigger a draw.
|
||||
pub(crate) fn show_quit_shortcut_hint(&mut self, key: KeyBinding) {
|
||||
if !DOUBLE_PRESS_QUIT_SHORTCUT_ENABLED {
|
||||
return;
|
||||
}
|
||||
|
||||
self.composer
|
||||
.show_quit_shortcut_hint(key, self.has_input_focus);
|
||||
let frame_requester = self.frame_requester.clone();
|
||||
@@ -695,7 +706,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ctrl_c_on_modal_consumes_and_shows_quit_hint() {
|
||||
fn ctrl_c_on_modal_consumes_without_showing_quit_hint() {
|
||||
let (tx_raw, _rx) = unbounded_channel::<AppEvent>();
|
||||
let tx = AppEventSender::new(tx_raw);
|
||||
let features = Features::with_defaults();
|
||||
@@ -711,7 +722,7 @@ mod tests {
|
||||
});
|
||||
pane.push_approval_request(exec_request(), &features);
|
||||
assert_eq!(CancellationEvent::Handled, pane.on_ctrl_c());
|
||||
assert!(pane.quit_shortcut_hint_visible());
|
||||
assert!(!pane.quit_shortcut_hint_visible());
|
||||
assert_eq!(CancellationEvent::NotHandled, pane.on_ctrl_c());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user