diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-28 04:11:56 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-28 04:12:53 +0300 |
| commit | bf9cc201244946496b4d950046bf7edcc4892994 (patch) | |
| tree | 920c866e67783cf31d2feff9642457204999c8eb /src/app/ids.rs | |
| parent | 789738cada5afaa20bbd77a0d479fb689c455bfe (diff) | |
fix: preserve live handoff terminal state
Diffstat (limited to 'src/app/ids.rs')
| -rw-r--r-- | src/app/ids.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/app/ids.rs b/src/app/ids.rs index 490e6051..a18efd2d 100644 --- a/src/app/ids.rs +++ b/src/app/ids.rs @@ -1,7 +1,7 @@ use super::App; impl App { - pub(super) fn find_pane( + pub(crate) fn find_pane( &self, pane_id: crate::layout::PaneId, ) -> Option<(usize, &crate::pane::PaneState)> { @@ -57,15 +57,27 @@ impl App { Some((ws_idx, tab_idx)) } + fn resolve_raw_pane_id(&self, raw: u32) -> Option<crate::layout::PaneId> { + if let Some(alias) = self.state.pane_id_aliases.get(&raw).copied() { + return self.find_pane(alias).map(|_| alias); + } + let pane_id = crate::layout::PaneId::from_raw(raw); + if self.find_pane(pane_id).is_some() { + return Some(pane_id); + } + None + } + pub(super) fn parse_pane_id(&self, id: &str) -> Option<(usize, crate::layout::PaneId)> { if let Some(rest) = id.strip_prefix("p_") { if let Some((ws_raw, pane_raw)) = rest.rsplit_once('_') { let ws_idx = self.parse_workspace_id(ws_raw)?; - let pane_id = crate::layout::PaneId::from_raw(pane_raw.parse::<u32>().ok()?); + let pane_id = self.resolve_raw_pane_id(pane_raw.parse::<u32>().ok()?)?; + self.state.workspaces.get(ws_idx)?.pane_state(pane_id)?; return Some((ws_idx, pane_id)); } - let pane_id = crate::layout::PaneId::from_raw(rest.parse::<u32>().ok()?); + let pane_id = self.resolve_raw_pane_id(rest.parse::<u32>().ok()?)?; return self.find_pane(pane_id).map(|(ws_idx, _)| (ws_idx, pane_id)); } |
