aboutsummaryrefslogtreecommitdiff
path: root/src/app/ids.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/ids.rs
parent17544c36ee397233e2f7b3319d86e3b517e3b5d0 (diff)
fix: preserve tab identity across restored sessions
Diffstat (limited to 'src/app/ids.rs')
-rw-r--r--src/app/ids.rs32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/app/ids.rs b/src/app/ids.rs
index 42cf47a8..9dc4371e 100644
--- a/src/app/ids.rs
+++ b/src/app/ids.rs
@@ -19,10 +19,8 @@ impl App {
pub(super) fn public_tab_id(&self, ws_idx: usize, tab_idx: usize) -> Option<String> {
let ws = self.state.workspaces.get(ws_idx)?;
let tab_number = ws.public_tab_number(tab_idx)?;
- Some(format!(
- "{}:t{}",
- ws.id,
- crate::workspace::encode_public_number(tab_number)
+ Some(crate::workspace::public_tab_id_for_number(
+ &ws.id, tab_number,
))
}
@@ -33,10 +31,9 @@ impl App {
) -> Option<String> {
let ws = self.state.workspaces.get(ws_idx)?;
let pane_number = ws.public_pane_number(pane_id)?;
- Some(format!(
- "{}:p{}",
- ws.id,
- crate::workspace::encode_public_number(pane_number)
+ Some(crate::workspace::public_pane_id_for_number(
+ &ws.id,
+ pane_number,
))
}
@@ -80,18 +77,17 @@ impl App {
let (ws_raw, tab_raw) = id.rsplit_once(':')?;
let ws_idx = self.parse_workspace_id(ws_raw)?;
- let tab_number = if let Some(encoded) = tab_raw.strip_prefix('t') {
- crate::workspace::decode_public_number(encoded)?
+ let tab_idx = if let Some(encoded) = tab_raw.strip_prefix('t') {
+ let tab_number = crate::workspace::decode_public_number(encoded)?;
+ self.state
+ .workspaces
+ .get(ws_idx)?
+ .tabs
+ .iter()
+ .position(|tab| tab.number == tab_number)?
} else {
- tab_raw.parse::<usize>().ok()?
+ tab_raw.parse::<usize>().ok()?.checked_sub(1)?
};
- let tab_idx = self
- .state
- .workspaces
- .get(ws_idx)?
- .tabs
- .iter()
- .position(|tab| tab.number == tab_number)?;
self.state.workspaces.get(ws_idx)?.tabs.get(tab_idx)?;
Some((ws_idx, tab_idx))
}