aboutsummaryrefslogtreecommitdiff
path: root/src/app/mod.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-14 05:30:20 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-14 05:30:20 +0300
commit226e87306deaba017d36583f51ae34e42b303aad (patch)
tree2a1155689b75007c15d93735aedfa58db7a05edf /src/app/mod.rs
parent17544c36ee397233e2f7b3319d86e3b517e3b5d0 (diff)
fix: preserve tab identity across restored sessions
Diffstat (limited to 'src/app/mod.rs')
-rw-r--r--src/app/mod.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs
index 356ecbab..36fedb71 100644
--- a/src/app/mod.rs
+++ b/src/app/mod.rs
@@ -2932,6 +2932,61 @@ mod tests {
}
#[test]
+ fn tab_info_number_uses_stable_public_tab_number() {
+ let mut app = test_app();
+ let mut workspace = Workspace::test_new("api-tab-public-number");
+ let removed_tab = workspace.test_add_tab(None);
+ let survivor_tab = workspace.test_add_tab(None);
+ let survivor_pane = workspace.tabs[survivor_tab].root_pane;
+ assert!(workspace.close_tab(removed_tab));
+ app.state.workspaces = vec![workspace];
+ app.state.ensure_test_terminals();
+ app.state.active = Some(0);
+ app.state.selected = 0;
+ let survivor_idx = app.state.workspaces[0]
+ .find_tab_index_for_pane(survivor_pane)
+ .unwrap();
+
+ let tab = app.tab_info(0, survivor_idx).unwrap();
+
+ assert_eq!(tab.tab_id, format!("{}:t3", app.state.workspaces[0].id));
+ assert_eq!(tab.number, 3);
+ assert_eq!(tab.label, "3");
+ }
+
+ #[test]
+ fn legacy_bare_tab_id_uses_tab_position_not_public_tab_number() {
+ let mut app = test_app();
+ let mut workspace = Workspace::test_new("legacy-tab-id");
+ let removed_tab = workspace.test_add_tab(None);
+ workspace.test_add_tab(None);
+ let public_four_tab = workspace.test_add_tab(None);
+ let fourth_position_tab = workspace.test_add_tab(None);
+ let public_four_pane = workspace.tabs[public_four_tab].root_pane;
+ let fourth_position_pane = workspace.tabs[fourth_position_tab].root_pane;
+ assert!(workspace.close_tab(removed_tab));
+ app.state.workspaces = vec![workspace];
+
+ let public_four_idx = app.state.workspaces[0]
+ .find_tab_index_for_pane(public_four_pane)
+ .unwrap();
+ let fourth_position_idx = app.state.workspaces[0]
+ .find_tab_index_for_pane(fourth_position_pane)
+ .unwrap();
+
+ assert_eq!(app.state.workspaces[0].tabs[public_four_idx].number, 4);
+ assert_eq!(app.state.workspaces[0].tabs[fourth_position_idx].number, 5);
+ assert_eq!(
+ app.parse_tab_id(&format!("{}:t4", app.state.workspaces[0].id)),
+ Some((0, public_four_idx))
+ );
+ assert_eq!(
+ app.parse_tab_id(&format!("{}:4", app.state.workspaces[0].id)),
+ Some((0, fourth_position_idx))
+ );
+ }
+
+ #[test]
fn workspace_creation_in_navigate_mode_uses_selected_workspace_seed_cwd() {
let mut app = test_app();
let mut first = Workspace::test_new("herdr");