diff options
-rw-r--r-- | zellij-server/src/pty.rs | 20 | ||||
-rw-r--r-- | zellij-utils/src/input/layout.rs | 3 |
2 files changed, 23 insertions, 0 deletions
diff --git a/zellij-server/src/pty.rs b/zellij-server/src/pty.rs index c68572580..e37e60621 100644 --- a/zellij-server/src/pty.rs +++ b/zellij-server/src/pty.rs @@ -95,8 +95,28 @@ pub(crate) fn pty_thread_main(mut pty: Pty, layout: LayoutFromYaml) { pty.set_active_pane(pane_id); } PtyInstruction::NewTab(terminal_action, tab_layout) => { + let tab_name = tab_layout.as_ref().and_then(|layout| { + if layout.name.is_empty() { + None + } else { + Some(layout.name.clone()) + } + }); + let merged_layout = layout.template.clone().insert_tab_layout(tab_layout); pty.spawn_terminals_for_layout(merged_layout.into(), terminal_action.clone()); + + if let Some(tab_name) = tab_name { + // clear current name at first + pty.bus + .senders + .send_to_screen(ScreenInstruction::UpdateTabName(vec![0])) + .unwrap(); + pty.bus + .senders + .send_to_screen(ScreenInstruction::UpdateTabName(tab_name.into_bytes())) + .unwrap(); + } } PtyInstruction::ClosePane(id) => { pty.close_pane(id); diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs index 5d4b34926..7d1024514 100644 --- a/zellij-utils/src/input/layout.rs +++ b/zellij-utils/src/input/layout.rs @@ -224,6 +224,8 @@ pub struct TabLayout { pub parts: Vec<TabLayout>, pub split_size: Option<SplitSize>, pub run: Option<Run>, + #[serde(default)] + pub name: String, } impl Layout { @@ -427,6 +429,7 @@ impl Default for TabLayout { parts: vec![], split_size: None, run: None, + name: String::new(), } } } |