aboutsummaryrefslogtreecommitdiff
path: root/src/persist
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-11 23:31:36 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-11 23:34:20 +0300
commitfe693f613a23452e68589a4337863f217cc57930 (patch)
tree8d60f6c5b0d8b31426c6623cc8b0c2415d481000 /src/persist
parent84c0d003ddb19a8e95e7ad5206771a663913605b (diff)
feat: add optional pane border labels
Diffstat (limited to 'src/persist')
-rw-r--r--src/persist/restore.rs9
-rw-r--r--src/persist/snapshot.rs13
2 files changed, 20 insertions, 2 deletions
diff --git a/src/persist/restore.rs b/src/persist/restore.rs
index 3eb5a4a3..7d623173 100644
--- a/src/persist/restore.rs
+++ b/src/persist/restore.rs
@@ -136,6 +136,11 @@ fn restore_tab(
}
};
+ let saved_label = reverse_id_map
+ .get(id)
+ .and_then(|old_id| snap.panes.get(old_id))
+ .and_then(|p| p.label.clone());
+
match PaneRuntime::spawn(
*id,
rows,
@@ -148,7 +153,9 @@ fn restore_tab(
render_dirty.clone(),
) {
Ok(runtime) => {
- panes.insert(*id, PaneState::new());
+ let mut pane_state = PaneState::new();
+ pane_state.manual_label = saved_label;
+ panes.insert(*id, pane_state);
pane_cwds.insert(*id, cwd.clone());
runtimes.insert(*id, runtime);
}
diff --git a/src/persist/snapshot.rs b/src/persist/snapshot.rs
index 2bcd034e..76ed96f5 100644
--- a/src/persist/snapshot.rs
+++ b/src/persist/snapshot.rs
@@ -68,6 +68,8 @@ pub struct TabSnapshot {
#[derive(Serialize, Deserialize)]
pub struct PaneSnapshot {
pub cwd: PathBuf,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
+ pub label: Option<String>,
}
/// Serializable BSP tree.
@@ -228,7 +230,8 @@ fn capture_tab(tab: &crate::workspace::Tab) -> TabSnapshot {
let cwd = tab
.cwd_for_pane(*id)
.unwrap_or_else(|| std::env::current_dir().unwrap_or_else(|_| "/".into()));
- panes.insert(id.raw(), PaneSnapshot { cwd });
+ let label = tab.panes.get(id).and_then(|pane| pane.manual_label.clone());
+ panes.insert(id.raw(), PaneSnapshot { cwd, label });
}
TabSnapshot {
custom_name: tab.custom_name.clone(),
@@ -381,12 +384,14 @@ mod tests {
0,
PaneSnapshot {
cwd: PathBuf::from("/home/can/Projects/herdr"),
+ label: None,
},
);
panes.insert(
1,
PaneSnapshot {
cwd: PathBuf::from("/home/can/Projects/website"),
+ label: Some("website".into()),
},
);
@@ -434,6 +439,10 @@ mod tests {
PathBuf::from("/home/can/Projects/herdr")
);
assert_eq!(
+ restored.workspaces[0].tabs[0].panes[&1].label.as_deref(),
+ Some("website")
+ );
+ assert_eq!(
restored.agent_panel_scope,
AgentPanelScope::CurrentWorkspace
);
@@ -691,6 +700,7 @@ mod tests {
0,
PaneSnapshot {
cwd: PathBuf::from("/tmp/this-directory-does-not-exist-for-herdr-test"),
+ label: None,
},
);
panes.insert(
@@ -699,6 +709,7 @@ mod tests {
cwd: std::env::var("HOME")
.map(PathBuf::from)
.unwrap_or_else(|_| PathBuf::from("/tmp")),
+ label: None,
},
);