diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-15 04:56:03 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-15 04:56:03 +0300 |
| commit | 4ffd99c2ec62fd3cbc9f9e0673d92c6a2a4f12b1 (patch) | |
| tree | 90941a31138eeb55090cb90e714c92ef4f1c848b /src/app | |
| parent | efe7c557690157a4e133cd60dd7e2ec1bf6124f7 (diff) | |
fix: keep auto tab labels compact
Diffstat (limited to 'src/app')
| -rw-r--r-- | src/app/actions.rs | 9 | ||||
| -rw-r--r-- | src/app/api/layouts.rs | 5 | ||||
| -rw-r--r-- | src/app/api/plugins/context.rs | 6 | ||||
| -rw-r--r-- | src/app/creation.rs | 2 | ||||
| -rw-r--r-- | src/app/input/modal.rs | 25 | ||||
| -rw-r--r-- | src/app/input/sidebar.rs | 5 | ||||
| -rw-r--r-- | src/app/mod.rs | 2 |
7 files changed, 36 insertions, 18 deletions
diff --git a/src/app/actions.rs b/src/app/actions.rs index 82aaa8f7..b033b372 100644 --- a/src/app/actions.rs +++ b/src/app/actions.rs @@ -219,8 +219,9 @@ pub fn notification_context( let mut context = format!("{} · {}", workspace_label, ws_idx + 1); if ws.tabs.len() > 1 { if let Some(tab_idx) = ws.find_tab_index_for_pane(pane_id) { - let tab = &ws.tabs[tab_idx]; - context.push_str(&format!(" · {}", tab.display_name())); + if let Some(label) = ws.tab_display_name(tab_idx) { + context.push_str(&format!(" · {label}")); + } } } context @@ -450,7 +451,9 @@ impl AppState { fn navigator_tab_row(&self, ws_idx: usize, tab_idx: usize) -> NavigatorRow { let ws = &self.workspaces[ws_idx]; let tab = &ws.tabs[tab_idx]; - let label = tab.display_name(); + let label = ws + .tab_display_name(tab_idx) + .unwrap_or_else(|| (tab_idx + 1).to_string()); let (status, seen) = tab_aggregate_state(tab, &self.terminals); let activity = tab_activity_summary(tab, &self.terminals); let pane_count = tab.panes.len(); diff --git a/src/app/api/layouts.rs b/src/app/api/layouts.rs index 32dec32a..2b83d027 100644 --- a/src/app/api/layouts.rs +++ b/src/app/api/layouts.rs @@ -677,7 +677,10 @@ mod tests { panic!("expected layout apply response"); }; assert_eq!(app.state.workspaces[0].tabs.len(), 1); - assert_eq!(app.state.workspaces[0].tabs[0].display_name(), "dev"); + assert_eq!( + app.state.workspaces[0].tab_display_name(0).as_deref(), + Some("dev") + ); let LayoutNode::Split { direction, ratio, diff --git a/src/app/api/plugins/context.rs b/src/app/api/plugins/context.rs index 881020b8..cd7d1818 100644 --- a/src/app/api/plugins/context.rs +++ b/src/app/api/plugins/context.rs @@ -196,7 +196,7 @@ impl App { ws_idx, workspace, self.public_tab_id(ws_idx, tab_idx), - Some(tab.display_name()), + ws.tab_display_name(tab_idx), focused_pane, correlation_id, )) @@ -257,7 +257,7 @@ impl App { let workspace = self.workspace_info(ws_idx); let tab_idx = ws.active_tab_index(); let tab_id = self.public_tab_id(ws_idx, tab_idx); - let tab_label = ws.tabs.get(tab_idx).map(|tab| tab.display_name()); + let tab_label = ws.tab_display_name(tab_idx); let focused_pane = ws .focused_pane_id() .and_then(|pane_id| self.pane_info(ws_idx, pane_id)); @@ -283,7 +283,7 @@ impl App { .find_tab_index_for_pane(pane_id) .unwrap_or_else(|| ws.active_tab_index()); let tab_id = self.public_tab_id(ws_idx, tab_idx); - let tab_label = ws.tabs.get(tab_idx).map(|tab| tab.display_name()); + let tab_label = ws.tab_display_name(tab_idx); let focused_pane = self.pane_info(ws_idx, pane_id); self.plugin_context_from_parts( ws_idx, diff --git a/src/app/creation.rs b/src/app/creation.rs index e53bce00..1d9b0f37 100644 --- a/src/app/creation.rs +++ b/src/app/creation.rs @@ -237,7 +237,7 @@ impl App { tab_id: self.public_tab_id(ws_idx, tab_idx)?, workspace_id: self.public_workspace_id(ws_idx), number: tab.number, - label: tab.display_name(), + label: ws.tab_display_name(tab_idx)?, focused: self.state.active == Some(ws_idx) && ws.active_tab == tab_idx, pane_count: tab.panes.len(), agent_status: pane_agent_status(agg_state, seen), diff --git a/src/app/input/modal.rs b/src/app/input/modal.rs index cff760bf..a8ffef7e 100644 --- a/src/app/input/modal.rs +++ b/src/app/input/modal.rs @@ -355,7 +355,7 @@ fn next_new_tab_default_name(state: &AppState) -> String { state .active .and_then(|i| state.workspaces.get(i)) - .map(|ws| ws.next_public_tab_number.to_string()) + .map(|ws| (ws.tabs.len() + 1).to_string()) .unwrap_or_else(|| "1".to_string()) } @@ -453,9 +453,14 @@ pub(super) fn apply_rename_action(state: &mut AppState, action: ModalAction) { if let Some(ws) = state.workspaces.get_mut(ws_idx) { let workspace_id = ws.id.clone(); let active_tab = ws.active_tab; + let keep_auto_name = ws + .tabs + .get(active_tab) + .is_some_and(|tab| tab.is_auto_named()) + && ws + .tab_display_name(active_tab) + .is_some_and(|name| new_name == name); if let Some(tab) = ws.active_tab_mut() { - let keep_auto_name = - tab.is_auto_named() && new_name == tab.number.to_string(); if !new_name.is_empty() && !keep_auto_name { tab.set_custom_name(new_name); let tab_id = ws @@ -1296,7 +1301,7 @@ mod tests { } #[test] - fn closing_first_auto_tab_keeps_remaining_auto_tab_number_and_next_prompt() { + fn closing_first_auto_tab_compacts_remaining_auto_tab_label_and_next_prompt() { let mut state = state_with_workspaces(&["test"]); open_new_tab_dialog(&mut state); handle_rename_key( @@ -1311,11 +1316,14 @@ mod tests { state.workspaces[0].close_tab(0); state.workspaces[0].switch_tab(0); - assert_eq!(state.workspaces[0].tabs[0].display_name(), "2"); + assert_eq!( + state.workspaces[0].tab_display_name(0).as_deref(), + Some("1") + ); assert!(state.workspaces[0].tabs[0].custom_name.is_none()); open_new_tab_dialog(&mut state); - assert_eq!(state.name_input, "3"); + assert_eq!(state.name_input, "2"); } #[test] @@ -1332,7 +1340,10 @@ mod tests { assert_eq!(state.mode, Mode::Terminal); assert!(state.workspaces[0].tabs[1].custom_name.is_none()); - assert_eq!(state.workspaces[0].tabs[1].display_name(), "2"); + assert_eq!( + state.workspaces[0].tab_display_name(1).as_deref(), + Some("2") + ); } #[test] diff --git a/src/app/input/sidebar.rs b/src/app/input/sidebar.rs index c4bd52d9..3ab5f8f5 100644 --- a/src/app/input/sidebar.rs +++ b/src/app/input/sidebar.rs @@ -1298,9 +1298,10 @@ mod tests { let labels: Vec<_> = app.state.workspaces[0] .tabs .iter() - .map(|tab| tab.display_name()) + .enumerate() + .map(|(tab_idx, _)| app.state.workspaces[0].tab_display_name(tab_idx).unwrap()) .collect(); - assert_eq!(labels, vec!["foo", "3", "1"]); + assert_eq!(labels, vec!["foo", "2", "3"]); assert_eq!( app.state.workspaces[0].tabs[0].custom_name.as_deref(), Some("foo") diff --git a/src/app/mod.rs b/src/app/mod.rs index d45e085b..1b90f157 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -2951,7 +2951,7 @@ mod tests { assert_eq!(tab.tab_id, format!("{}:t3", app.state.workspaces[0].id)); assert_eq!(tab.number, 3); - assert_eq!(tab.label, "3"); + assert_eq!(tab.label, "2"); } #[test] |
