diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-07 19:07:36 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-07 19:07:36 +0300 |
| commit | b0723b7906998dbe5314aaf05d18c047fd288dd0 (patch) | |
| tree | 07a40ec092468b551cf46d93074101ea61644f1b /src/app | |
| parent | 374d3eddc55ac0d8b21df2b6bf7f056634fb86f9 (diff) | |
fix(input): preserve shift in kitty alternate reports (#2479)
refs #2435
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/input/navigate.rs | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs index 68941e66..1c892028 100644 --- a/src/app/input/navigate.rs +++ b/src/app/input/navigate.rs @@ -1901,7 +1901,12 @@ mod tests { use super::super::{state_with_workspaces, unique_temp_path}; use super::*; use crate::{ - app::App, config::Config, input::TerminalKey, terminal::TerminalState, workspace::Workspace, + app::App, + config::Config, + input::TerminalKey, + raw_input::{parse_raw_input_bytes_sync, RawInputEvent}, + terminal::TerminalState, + workspace::Workspace, }; fn mark_worktree_space_member(state: &mut AppState, ws_idx: usize, key: &str) { @@ -2841,6 +2846,35 @@ command = "printf literal > '{}'" } #[tokio::test] + async fn kitty_shifted_alternate_without_modifier_prefers_reload_over_resize() { + let (_api_tx, api_rx) = tokio::sync::mpsc::unbounded_channel(); + let mut app = App::new( + &Config::default(), + true, + None, + api_rx, + crate::api::EventHub::default(), + ); + app.state.workspaces = vec![Workspace::test_new("test")]; + app.state.active = Some(0); + app.state.selected = 0; + app.state.mode = Mode::Prefix; + + let mut events = parse_raw_input_bytes_sync(b"\x1b[114:82;1u"); + assert_eq!(events.len(), 1); + let RawInputEvent::Key(key) = events.remove(0) else { + panic!("expected key event"); + }; + assert_eq!( + action_for_key(&app.state, key.clone(), BindingDispatch::Prefix), + Some(NavigateAction::ReloadConfig) + ); + app.handle_prefix_key(key); + + assert_eq!(app.state.mode, Mode::Terminal); + } + + #[tokio::test] async fn legacy_uppercase_prefers_shifted_reload_binding_over_unshifted() { let (_api_tx, api_rx) = tokio::sync::mpsc::unbounded_channel(); let mut app = App::new( |
