From 520f4272d0f332f2a98a2a7486be1797feb86dcf Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Tue, 12 May 2026 00:24:13 +0300 Subject: feat: add agent cycling and tab wheel switching fixes #92 --- src/app/input/navigate.rs | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'src/app/input/navigate.rs') diff --git a/src/app/input/navigate.rs b/src/app/input/navigate.rs index ce3d9cf4..6dfaf475 100644 --- a/src/app/input/navigate.rs +++ b/src/app/input/navigate.rs @@ -30,6 +30,18 @@ pub(crate) fn terminal_direct_navigation_action( { return Some(NavigateAction::NextWorkspace); } + if kb + .previous_agent + .is_some_and(|(code, mods)| key_matches(key, code, mods)) + { + return Some(NavigateAction::PreviousAgent); + } + if kb + .next_agent + .is_some_and(|(code, mods)| key_matches(key, code, mods)) + { + return Some(NavigateAction::NextAgent); + } if kb .previous_tab .is_some_and(|(code, mods)| key_matches(key, code, mods)) @@ -363,6 +375,8 @@ pub(crate) enum NavigateAction { CloseWorkspace, PreviousWorkspace, NextWorkspace, + PreviousAgent, + NextAgent, NewTab, RenameTab, PreviousTab, @@ -407,6 +421,18 @@ fn navigate_action_for_key(state: &AppState, key: &KeyEvent) -> Option { + state.previous_agent(); + leave_navigate_mode(state); + } + NavigateAction::NextAgent => { + state.next_agent(); + leave_navigate_mode(state); + } NavigateAction::NewTab => super::modal::open_new_tab_dialog(state), NavigateAction::RenameTab => super::modal::open_rename_active_tab(state, false), NavigateAction::PreviousTab => { @@ -729,6 +763,20 @@ mod tests { assert_eq!(state.mobile_switcher_scroll, 1); } + #[test] + fn terminal_direct_agent_shortcut_maps_to_navigation_action() { + let mut state = state_with_workspaces(&["test"]); + state.keybinds.next_agent = Some((KeyCode::Char('a'), KeyModifiers::ALT)); + state.keybinds.next_agent_label = Some("alt+a".into()); + + let action = terminal_direct_navigation_action( + &state, + &KeyEvent::new(KeyCode::Char('a'), KeyModifiers::ALT), + ); + + assert_eq!(action, Some(NavigateAction::NextAgent)); + } + #[test] fn terminal_direct_focus_pane_shortcut_maps_to_navigation_action() { let mut state = state_with_workspaces(&["test"]); -- cgit v1.2.3