aboutsummaryrefslogtreecommitdiff
path: root/src/config
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-12 00:24:13 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-12 00:24:13 +0300
commit520f4272d0f332f2a98a2a7486be1797feb86dcf (patch)
treef53830efc04e6961d7b0cd003bc453b95a714fe1 /src/config
parent8d5dca8cfe2d580835d3392d0ebdff57f7de7298 (diff)
feat: add agent cycling and tab wheel switching
fixes #92
Diffstat (limited to 'src/config')
-rw-r--r--src/config/keybinds.rs65
-rw-r--r--src/config/model.rs6
2 files changed, 53 insertions, 18 deletions
diff --git a/src/config/keybinds.rs b/src/config/keybinds.rs
index 90dc2283..a18dcbc3 100644
--- a/src/config/keybinds.rs
+++ b/src/config/keybinds.rs
@@ -73,6 +73,10 @@ pub struct Keybinds {
pub previous_workspace_label: Option<String>,
pub next_workspace: Option<(KeyCode, KeyModifiers)>,
pub next_workspace_label: Option<String>,
+ pub previous_agent: Option<(KeyCode, KeyModifiers)>,
+ pub previous_agent_label: Option<String>,
+ pub next_agent: Option<(KeyCode, KeyModifiers)>,
+ pub next_agent_label: Option<String>,
pub new_tab: (KeyCode, KeyModifiers),
pub new_tab_label: String,
pub rename_tab: Option<(KeyCode, KeyModifiers)>,
@@ -367,6 +371,18 @@ impl Config {
),
optional_binding(
BindingScope::Navigate,
+ "keys.previous_agent",
+ &self.keys.previous_agent,
+ &mut diagnostics,
+ ),
+ optional_binding(
+ BindingScope::Navigate,
+ "keys.next_agent",
+ &self.keys.next_agent,
+ &mut diagnostics,
+ ),
+ optional_binding(
+ BindingScope::Navigate,
"keys.rename_tab",
&self.keys.rename_tab,
&mut diagnostics,
@@ -610,26 +626,30 @@ impl Config {
previous_workspace_label: optional_bindings[3].label.clone(),
next_workspace: optional_bindings[4].value,
next_workspace_label: optional_bindings[4].label.clone(),
+ previous_agent: optional_bindings[5].value,
+ previous_agent_label: optional_bindings[5].label.clone(),
+ next_agent: optional_bindings[6].value,
+ next_agent_label: optional_bindings[6].label.clone(),
new_tab: bindings[3].value,
new_tab_label: bindings[3].label.clone(),
- rename_tab: optional_bindings[5].value,
- rename_tab_label: optional_bindings[5].label.clone(),
- previous_tab: optional_bindings[6].value,
- previous_tab_label: optional_bindings[6].label.clone(),
- next_tab: optional_bindings[7].value,
- next_tab_label: optional_bindings[7].label.clone(),
- close_tab: optional_bindings[8].value,
- close_tab_label: optional_bindings[8].label.clone(),
- rename_pane: optional_bindings[9].value,
- rename_pane_label: optional_bindings[9].label.clone(),
- focus_pane_left: optional_bindings[10].value,
- focus_pane_left_label: optional_bindings[10].label.clone(),
- focus_pane_down: optional_bindings[11].value,
- focus_pane_down_label: optional_bindings[11].label.clone(),
- focus_pane_up: optional_bindings[12].value,
- focus_pane_up_label: optional_bindings[12].label.clone(),
- focus_pane_right: optional_bindings[13].value,
- focus_pane_right_label: optional_bindings[13].label.clone(),
+ rename_tab: optional_bindings[7].value,
+ rename_tab_label: optional_bindings[7].label.clone(),
+ previous_tab: optional_bindings[8].value,
+ previous_tab_label: optional_bindings[8].label.clone(),
+ next_tab: optional_bindings[9].value,
+ next_tab_label: optional_bindings[9].label.clone(),
+ close_tab: optional_bindings[10].value,
+ close_tab_label: optional_bindings[10].label.clone(),
+ rename_pane: optional_bindings[11].value,
+ rename_pane_label: optional_bindings[11].label.clone(),
+ focus_pane_left: optional_bindings[12].value,
+ focus_pane_left_label: optional_bindings[12].label.clone(),
+ focus_pane_down: optional_bindings[13].value,
+ focus_pane_down_label: optional_bindings[13].label.clone(),
+ focus_pane_up: optional_bindings[14].value,
+ focus_pane_up_label: optional_bindings[14].label.clone(),
+ focus_pane_right: optional_bindings[15].value,
+ focus_pane_right_label: optional_bindings[15].label.clone(),
split_vertical: bindings[4].value,
split_vertical_label: bindings[4].label.clone(),
split_horizontal: bindings[5].value,
@@ -863,6 +883,8 @@ mod tests {
(KeyCode::Char('d'), KeyModifiers::SHIFT)
);
assert_eq!(kb.detach, None);
+ assert_eq!(kb.previous_agent, None);
+ assert_eq!(kb.next_agent, None);
assert_eq!(kb.split_vertical.0, KeyCode::Char('v'));
assert_eq!(kb.split_horizontal.0, KeyCode::Char('-'));
assert_eq!(kb.close_pane.0, KeyCode::Char('x'));
@@ -886,6 +908,8 @@ close_pane = "ctrl+w"
fullscreen = "z"
resize_mode = "ctrl+r"
toggle_sidebar = "tab"
+previous_agent = "alt+a"
+next_agent = "alt+d"
focus_pane_left = "alt+h"
focus_pane_right = "alt+right"
"#;
@@ -917,6 +941,11 @@ focus_pane_right = "alt+right"
assert_eq!(kb.resize_mode, (KeyCode::Char('r'), KeyModifiers::CONTROL));
assert_eq!(kb.toggle_sidebar, (KeyCode::Tab, KeyModifiers::empty()));
assert_eq!(
+ kb.previous_agent,
+ Some((KeyCode::Char('a'), KeyModifiers::ALT))
+ );
+ assert_eq!(kb.next_agent, Some((KeyCode::Char('d'), KeyModifiers::ALT)));
+ assert_eq!(
kb.focus_pane_left,
Some((KeyCode::Char('h'), KeyModifiers::ALT))
);
diff --git a/src/config/model.rs b/src/config/model.rs
index 166e3ffa..8d2b356f 100644
--- a/src/config/model.rs
+++ b/src/config/model.rs
@@ -85,6 +85,10 @@ pub struct KeysConfig {
pub previous_workspace: String,
/// Select the next workspace. Unset by default.
pub next_workspace: String,
+ /// Focus the previous agent shown in the agent panel. Unset by default.
+ pub previous_agent: String,
+ /// Focus the next agent shown in the agent panel. Unset by default.
+ pub next_agent: String,
/// Create a new tab in the active workspace. Default: "c"
pub new_tab: String,
/// Rename the active tab. Unset by default.
@@ -162,6 +166,8 @@ impl Default for KeysConfig {
open_notification_target: "".into(),
previous_workspace: "".into(),
next_workspace: "".into(),
+ previous_agent: "".into(),
+ next_agent: "".into(),
new_tab: "c".into(),
rename_tab: "".into(),
previous_tab: "".into(),