aboutsummaryrefslogtreecommitdiff
path: root/src/app/ids.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-28 04:11:56 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-28 04:12:53 +0300
commitbf9cc201244946496b4d950046bf7edcc4892994 (patch)
tree920c866e67783cf31d2feff9642457204999c8eb /src/app/ids.rs
parent789738cada5afaa20bbd77a0d479fb689c455bfe (diff)
fix: preserve live handoff terminal state
Diffstat (limited to 'src/app/ids.rs')
-rw-r--r--src/app/ids.rs18
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));
}