aboutsummaryrefslogtreecommitdiff
path: root/src/app/mod.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-11 23:31:36 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-11 23:34:20 +0300
commitfe693f613a23452e68589a4337863f217cc57930 (patch)
tree8d60f6c5b0d8b31426c6623cc8b0c2415d481000 /src/app/mod.rs
parent84c0d003ddb19a8e95e7ad5206771a663913605b (diff)
feat: add optional pane border labels
Diffstat (limited to 'src/app/mod.rs')
-rw-r--r--src/app/mod.rs54
1 files changed, 53 insertions, 1 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs
index 60e38f5b..43d15bec 100644
--- a/src/app/mod.rs
+++ b/src/app/mod.rs
@@ -292,6 +292,7 @@ impl App {
request_clipboard_write: None,
creating_new_tab: false,
requested_new_tab_name: None,
+ rename_pane_target: None,
request_complete_onboarding: false,
name_input: String::new(),
name_input_replace_on_type: false,
@@ -344,6 +345,7 @@ impl App {
sidebar_section_split,
agent_panel_scope,
confirm_close: config.ui.confirm_close,
+ show_agent_labels_on_pane_borders: config.ui.show_agent_labels_on_pane_borders,
pane_scrollback_limit_bytes: config.advanced.scrollback_limit_bytes,
accent: crate::config::parse_color(&config.ui.accent),
sound: config.ui.sound.clone(),
@@ -649,6 +651,8 @@ impl App {
self.state.sidebar_width = config.ui.sidebar_width;
}
self.state.confirm_close = config.ui.confirm_close;
+ self.state.show_agent_labels_on_pane_borders =
+ config.ui.show_agent_labels_on_pane_borders;
self.state.agent_panel_scope =
agent_panel_scope_from_config(config.ui.agent_panel_scope);
self.state.agent_panel_scroll = 0;
@@ -809,7 +813,7 @@ impl App {
Mode::Navigate => {
self.handle_navigate_key(key);
}
- Mode::RenameWorkspace | Mode::RenameTab => {
+ Mode::RenameWorkspace | Mode::RenameTab | Mode::RenamePane => {
input::handle_rename_key(&mut self.state, key_event);
}
Mode::Resize => {
@@ -1482,6 +1486,54 @@ mod tests {
assert!(app.state.should_quit);
}
+ #[test]
+ fn pane_rename_request_sets_and_clears_manual_label() {
+ let mut app = test_app();
+ let workspace = Workspace::test_new("api-pane-rename");
+ let pane = workspace.tabs[0].root_pane;
+ app.state.workspaces = vec![workspace];
+ app.state.active = Some(0);
+ app.state.selected = 0;
+
+ let pane_id = app.pane_info(0, pane).unwrap().pane_id;
+ let response = app.handle_api_request(crate::api::schema::Request {
+ id: "req_pane_rename".into(),
+ method: crate::api::schema::Method::PaneRename(crate::api::schema::PaneRenameParams {
+ pane_id: pane_id.clone(),
+ label: Some("reviewer".into()),
+ }),
+ });
+ let response: serde_json::Value = serde_json::from_str(&response).unwrap();
+
+ assert_eq!(response["result"]["type"], "pane_info");
+ assert_eq!(response["result"]["pane"]["label"], "reviewer");
+ assert_eq!(
+ app.state.workspaces[0]
+ .pane_state(pane)
+ .unwrap()
+ .manual_label
+ .as_deref(),
+ Some("reviewer")
+ );
+
+ let response = app.handle_api_request(crate::api::schema::Request {
+ id: "req_pane_rename_clear".into(),
+ method: crate::api::schema::Method::PaneRename(crate::api::schema::PaneRenameParams {
+ pane_id,
+ label: None,
+ }),
+ });
+ let response: serde_json::Value = serde_json::from_str(&response).unwrap();
+
+ assert_eq!(response["result"]["type"], "pane_info");
+ assert!(response["result"]["pane"].get("label").is_none());
+ assert!(app.state.workspaces[0]
+ .pane_state(pane)
+ .unwrap()
+ .manual_label
+ .is_none());
+ }
+
#[tokio::test]
async fn pane_split_request_targets_pane_in_background_tab() {
let _guard = config_env_lock().lock().unwrap();