diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-11 23:31:36 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-11 23:34:20 +0300 |
| commit | fe693f613a23452e68589a4337863f217cc57930 (patch) | |
| tree | 8d60f6c5b0d8b31426c6623cc8b0c2415d481000 /src/persist | |
| parent | 84c0d003ddb19a8e95e7ad5206771a663913605b (diff) | |
feat: add optional pane border labels
Diffstat (limited to 'src/persist')
| -rw-r--r-- | src/persist/restore.rs | 9 | ||||
| -rw-r--r-- | src/persist/snapshot.rs | 13 |
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, }, ); |
