diff options
| author | user <user@clank> | 2026-08-12 17:05:34 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-12 19:34:19 +0200 |
| commit | 21fbcf3c68d38423d994f529a4653b9cd77fc4c0 (patch) | |
| tree | 65a8514c54424bf90ad887bf59f24810518d5c8c /sl0ppij/zellij-utils/src | |
| parent | sl0p: propose per-pane workspace hints (diff) | |
| download | sl0ppi-21fbcf3c68d38423d994f529a4653b9cd77fc4c0.tar.gz sl0ppi-21fbcf3c68d38423d994f529a4653b9cd77fc4c0.tar.xz sl0ppi-21fbcf3c68d38423d994f529a4653b9cd77fc4c0.zip | |
sl0p: per-pane workspace hints (purpose=)
Implements the zellij half of sl0p/workspace-hints-proposal.md: a pane can carry
an opaque agent-facing hint for what it is FOR, so a project can ship a layout
that an agent is able to navigate instead of guessing.
zellij never interprets a purpose. The consuming agent owns the entire vocabulary,
which is what keeps this to one string threaded along the existing status_bar path
rather than a policy engine, and lets the vocabulary change without a rebuild.
Two ways in, because declared panes and agent-created panes are different:
layout: pane name="server" purpose="dev-server"
in-band: printf '\033]5577;1;purpose;agent:build\033\\'
The second exists because tagging at spawn time would mean threading a field
through 28 SpawnTerminal call sites, and a new action variant is impossible while
protobuf enums cannot be regenerated. Wrapping the command costs one printf.
A declared purpose outranks an in-band one and cannot be overridden or cleared by
it. OSC arrives from whatever the pane happens to be showing, so otherwise a
`cat hostile.txt` in the human's editor pane could relabel it as the agent's
scratch pane and invite an agent to run commands where the human is working. A
layout is written by a human in a file they can read; in-band data only fills a
blank.
Exposed on PaneListEntry (`list-panes --json`) rather than PaneInfo, which crosses
the plugin protobuf API we cannot regenerate; resolved in the screen thread where
panes live rather than via route.rs's per-pane PTY round-trips. Values are
sanitised to a bounded [A-Za-z0-9_.:/-] token at both entry points, because a
purpose is never rendered -- it is matched against and pasted into consumers'
shell and JSON pipelines.
Verified end to end rather than by inspection: purposes from a layout appear in
list-panes --json against the right pane ids, an agent-spawned pane tags itself,
a declared purpose survives an in-band override attempt, all of it comes back
after kill + resurrect, an unknown pane property is still a parse error, and a
layout with no purpose leaves dump-layout unchanged.
Diffstat (limited to 'sl0ppij/zellij-utils/src')
52 files changed, 525 insertions, 1 deletions
diff --git a/sl0ppij/zellij-utils/src/data.rs b/sl0ppij/zellij-utils/src/data.rs index fa18a36..14444b2 100644 --- a/sl0ppij/zellij-utils/src/data.rs +++ b/sl0ppij/zellij-utils/src/data.rs @@ -2462,6 +2462,11 @@ pub struct PaneListEntry { pub pane_command: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub pane_cwd: Option<String>, + /// Opaque agent-facing hint for what this pane is for, from the layout's + /// `purpose=` or OSC 5577. Lives here rather than on `PaneInfo` because + /// `PaneInfo` crosses the plugin protobuf API, which we cannot regenerate. + #[serde(skip_serializing_if = "Option::is_none")] + pub purpose: Option<String>, } pub type ListPanesResponse = Vec<PaneListEntry>; diff --git a/sl0ppij/zellij-utils/src/input/layout.rs b/sl0ppij/zellij-utils/src/input/layout.rs index 7906338..26b57aa 100644 --- a/sl0ppij/zellij-utils/src/input/layout.rs +++ b/sl0ppij/zellij-utils/src/input/layout.rs @@ -85,6 +85,35 @@ pub fn sanitize_status_bar_text(raw: &str) -> String { .to_owned() } +/// Longest pane purpose we accept. A purpose is a vocabulary token, not prose. +const MAX_PANE_PURPOSE: usize = 64; + +/// Normalise a pane `purpose` (see `sl0p/workspace-hints-proposal.md`). +/// +/// Zellij deliberately does not know what any purpose MEANS -- the consuming +/// agent owns the whole vocabulary. All that is enforced here is that the value +/// is a safe, bounded token, because it arrives from two untrusted-ish places: a +/// layout file shipped in a repository, and an OSC sequence any program in the +/// pane can emit. +/// +/// Restricted to `[A-Za-z0-9_.:/-]` rather than merely stripping control +/// characters, because unlike status bar text a purpose is never rendered -- it +/// is matched against and pasted into consumers' shell/JSON pipelines, where +/// whitespace, quotes and `;` are what cause trouble. Returns None for anything +/// that sanitises down to nothing, so "absent" and "empty" cannot diverge. +pub fn sanitize_pane_purpose(raw: &str) -> Option<String> { + let cleaned: String = raw + .chars() + .filter(|c| c.is_ascii_alphanumeric() || matches!(c, '_' | '-' | '.' | ':' | '/')) + .take(MAX_PANE_PURPOSE) + .collect(); + if cleaned.is_empty() { + None + } else { + Some(cleaned) + } +} + /// A clickable button in a pane's status bar (OSC 5577). #[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] pub struct StatusBarButton { @@ -1096,6 +1125,8 @@ pub struct FloatingPaneLayout { pub logical_position: Option<usize>, pub default_fg: Option<String>, pub default_bg: Option<String>, + /// See `TiledPaneLayout::purpose`. + pub purpose: Option<String>, } impl FloatingPaneLayout { @@ -1115,6 +1146,7 @@ impl FloatingPaneLayout { logical_position: None, default_fg: None, default_bg: None, + purpose: None, } } pub fn add_cwd_to_layout(&mut self, cwd: &PathBuf) { @@ -1166,6 +1198,9 @@ pub struct TiledPaneLayout { pub status_bar: Option<String>, /// Status bar buttons, in the same wire format the escape sequence uses. pub status_bar_buttons: Option<String>, + /// Opaque agent-facing hint for what this pane is FOR. Zellij never + /// interprets it; see `sl0p/workspace-hints-proposal.md`. + pub purpose: Option<String>, /// How panes inserted at this node's `children` placeholder are arranged. /// `None` keeps the historical behaviour: flat siblings. /// diff --git a/sl0ppij/zellij-utils/src/input/unit/layout_test.rs b/sl0ppij/zellij-utils/src/input/unit/layout_test.rs index c48c17e..4a6eb85 100644 --- a/sl0ppij/zellij-utils/src/input/unit/layout_test.rs +++ b/sl0ppij/zellij-utils/src/input/unit/layout_test.rs @@ -2940,3 +2940,79 @@ fn sl0p_status_bar_button_style_changes_rendering_and_spans_together() { } } } + +#[test] +fn sl0p_pane_purpose_is_sanitised_to_a_bounded_token() { + use crate::input::layout::sanitize_pane_purpose; + // Kept: the vocabulary consumers actually use. + assert_eq!( + sanitize_pane_purpose("dev-server"), + Some("dev-server".to_string()) + ); + assert_eq!( + sanitize_pane_purpose("pi:agent/scratch_1.v2"), + Some("pi:agent/scratch_1.v2".to_string()) + ); + // A purpose arrives from a layout file in someone else's repo, or from any + // program in the pane via OSC. It is pasted into shell and JSON pipelines, so + // quoting, whitespace, separators and control characters must not survive. + assert_eq!( + sanitize_pane_purpose("rm -rf /; echo \"pwned\"\n"), + Some("rm-rf/echopwned".to_string()) + ); + assert_eq!( + sanitize_pane_purpose("$(id)`id`"), + Some("idid".to_string()), + "shell metacharacters are dropped, the identifier bytes are not" + ); + // Absent and empty must not be able to diverge. + assert_eq!(sanitize_pane_purpose(""), None); + assert_eq!(sanitize_pane_purpose(" "), None); + assert_eq!(sanitize_pane_purpose("!!!"), None); + // Bounded. + assert_eq!(sanitize_pane_purpose(&"a".repeat(200)).unwrap().len(), 64); +} + +#[test] +fn sl0p_pane_purpose_parses_from_kdl_for_tiled_and_floating_panes() { + let kdl = r#" + layout { + tab name="work" { + pane name="server" purpose="dev-server" + pane name="plain" + floating_panes { + pane name="notes" purpose="human:notes" + } + } + } + "#; + let layout = Layout::from_kdl(kdl, Some("w.kdl".into()), None, None) + .expect("a layout with purposes should parse"); + let (_, tiled, floating) = layout.tabs().into_iter().next().expect("one tab"); + let purposes: Vec<Option<String>> = tiled.children.iter().map(|c| c.purpose.clone()).collect(); + assert_eq!( + purposes, + vec![Some("dev-server".to_string()), None], + "declared purposes land on the right panes, and absence stays absent" + ); + assert_eq!( + floating.iter().map(|f| f.purpose.clone()).collect::<Vec<_>>(), + vec![Some("human:notes".to_string())], + "floating panes carry a purpose too" + ); +} + +#[test] +fn sl0p_unknown_pane_properties_are_still_rejected() { + // Adding `purpose` must not turn the pane property allowlist into "accept + // anything" -- a typo in a workspace file should still be a loud error. + let kdl = r#" + layout { + pane name="server" porpoise="dev-server" + } + "#; + assert!( + Layout::from_kdl(kdl, Some("w.kdl".into()), None, None).is_err(), + "an unknown pane property should be a parse error" + ); +} diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap index 5ffcf17..1fb2ceb 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap @@ -43,6 +43,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -79,6 +80,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -97,6 +99,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap index 92c90a5..3b0b3c6 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap @@ -46,6 +46,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -82,6 +83,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -100,6 +102,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap index 1b11ca7..b85f99f 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_a_stack_with_an_expanded_pane.snap @@ -35,6 +35,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -56,6 +57,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -77,6 +79,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -95,6 +98,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -113,6 +117,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap index 15ad6e8..5f605d7 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_node.snap @@ -35,6 +35,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -56,6 +57,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -74,6 +76,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -92,6 +95,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap index 9077d5b..a99eb02 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_define_stacked_children_for_pane_template.snap @@ -39,6 +39,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -60,6 +61,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -78,6 +80,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -96,6 +99,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -114,6 +118,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap index 9fedd5e..a3151c9 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__can_load_swap_layouts_from_a_different_file.snap @@ -31,6 +31,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -49,6 +50,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -106,6 +108,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -135,6 +138,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -158,6 +162,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -176,6 +181,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -194,6 +200,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -238,6 +245,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -256,6 +264,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, MaxPanes( @@ -306,6 +315,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -337,6 +347,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -362,6 +373,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -383,6 +395,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -404,6 +417,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -425,6 +439,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -443,6 +458,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -461,6 +477,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -479,6 +496,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -523,6 +541,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -541,6 +560,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, MaxPanes( @@ -591,6 +611,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -622,6 +643,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -647,6 +669,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -668,6 +691,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -689,6 +713,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -710,6 +735,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -728,6 +754,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -753,6 +780,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -774,6 +802,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -795,6 +824,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -816,6 +846,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -834,6 +865,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -852,6 +884,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -870,6 +903,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -914,6 +948,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -932,6 +967,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, }, diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap index 91f605a..2296484 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_pane_template.snap @@ -41,6 +41,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -87,6 +89,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -105,6 +108,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -123,6 +127,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -144,6 +149,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -162,6 +168,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -191,6 +198,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -211,6 +219,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -232,6 +241,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -250,6 +260,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -268,6 +279,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap index e48b7d0..64cf4b5 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__children_not_as_first_child_of_tab_template.snap @@ -36,6 +36,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -61,6 +62,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -82,6 +84,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -100,6 +103,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -118,6 +122,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -139,6 +144,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -157,6 +163,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -190,6 +197,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -210,6 +218,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -231,6 +240,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -249,6 +259,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -276,6 +287,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap index 6e29735..b866260 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap @@ -43,6 +43,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -76,6 +77,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -94,6 +96,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap index 2b4ed08..c89b99d 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap @@ -43,6 +43,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -76,6 +77,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -94,6 +96,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap index f9d8f07..371b2d8 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__combined_tab_and_pane_template_both_with_children.snap @@ -36,6 +36,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -63,6 +64,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -81,6 +83,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -102,6 +105,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -120,6 +124,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -145,6 +150,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -166,6 +172,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -184,6 +191,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -202,6 +210,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -235,6 +244,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -262,6 +272,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -280,6 +291,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -301,6 +313,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -319,6 +332,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -340,6 +354,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -358,6 +373,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -385,6 +401,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap index 5c1e41e..c1c0ed7 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap @@ -43,6 +43,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -78,6 +79,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -96,6 +98,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap index 1aaaedd..b2f4c65 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap @@ -45,6 +45,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -80,6 +81,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -98,6 +100,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap index c7fc13e..37defc0 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__env_var_expansion.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -59,6 +60,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -84,6 +86,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -109,6 +112,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -144,6 +148,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -173,6 +178,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -202,6 +208,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -237,6 +244,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -266,6 +274,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -288,6 +297,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -323,6 +333,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -348,6 +359,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -373,6 +385,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -398,6 +411,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -433,6 +447,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -462,6 +477,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -491,6 +507,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -526,6 +543,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -555,6 +573,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -577,6 +596,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap index c79bbe9..009d9e7 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -118,6 +121,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap index e7c9816..58d997a 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templates.snap @@ -38,6 +38,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -73,6 +74,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -102,6 +104,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -124,6 +127,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -146,6 +150,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -168,6 +173,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -195,6 +201,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap index 7427434..d44ed33 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templates.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -98,6 +100,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -120,6 +123,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -142,6 +146,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -169,6 +174,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap index 5d4168c..a6b80fe 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -126,6 +129,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -161,6 +165,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -183,6 +188,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap index 0bdcafe..c07bc43 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap @@ -35,6 +35,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -70,6 +71,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -92,6 +94,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap index 9c1e746..ce2e842 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -126,6 +129,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -161,6 +165,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -183,6 +188,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap index 90afd3d..e08fd15 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_prepended_to_panes_with_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -126,6 +129,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -161,6 +165,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -183,6 +188,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap index 41795b1..c86a892 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_with_tab_cwd_given_to_panes_without_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -118,6 +121,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap index eb1150d..df40b20 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_close_on_exit.snap @@ -43,6 +43,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -61,6 +62,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap index 05e71ef..6ea28da 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_command_panes_and_start_suspended.snap @@ -43,6 +43,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -61,6 +62,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap index 6759e5f..9e67a11 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_default_tab_template.snap @@ -32,6 +32,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -57,6 +58,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -78,6 +80,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -96,6 +99,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -117,6 +121,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -135,6 +140,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -166,6 +172,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -191,6 +198,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -212,6 +220,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -230,6 +239,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -251,6 +261,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -269,6 +280,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -298,6 +310,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -319,6 +332,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -340,6 +354,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -358,6 +373,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -389,6 +405,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -410,6 +427,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -431,6 +449,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -449,6 +468,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap index be11411..af953c7 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_branched_pane_templates.snap @@ -35,6 +35,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -56,6 +57,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -81,6 +83,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -102,6 +105,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -120,6 +124,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -145,6 +150,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -166,6 +172,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -187,6 +194,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -205,6 +213,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -223,6 +232,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -241,6 +251,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap index e6b561e..c69542f 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_nested_pane_templates.snap @@ -35,6 +35,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -56,6 +57,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -81,6 +83,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -102,6 +105,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -120,6 +124,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -141,6 +146,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -159,6 +165,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -177,6 +184,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap index 2af0bc1..c70b9b6 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_new_tab_template.snap @@ -32,6 +32,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -53,6 +54,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -71,6 +73,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -102,6 +105,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -123,6 +127,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -141,6 +146,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -166,6 +172,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -201,6 +208,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -222,6 +230,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -240,6 +249,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -258,6 +268,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap index 15b9702..913e4fa 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_excluded_from_sync.snap @@ -33,6 +33,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -51,6 +52,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap index bafe8dd..c7b8e75 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_pane_templates.snap @@ -35,6 +35,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -60,6 +61,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -78,6 +80,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -99,6 +102,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -117,6 +121,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -142,6 +147,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -167,6 +173,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -188,6 +195,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -206,6 +214,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -227,6 +236,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -245,6 +255,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -270,6 +281,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -295,6 +307,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -316,6 +329,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -334,6 +348,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -355,6 +370,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -373,6 +389,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -398,6 +415,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -419,6 +437,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -440,6 +459,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -458,6 +478,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -476,6 +497,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap index f37702e..3861767 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tab_and_pane_templates.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -71,6 +72,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -89,6 +91,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -110,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -128,6 +132,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -146,6 +151,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -173,6 +179,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap index 9e8c441..410586a 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__layout_with_tabs_and_floating_panes.snap @@ -30,6 +30,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -48,6 +49,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [ @@ -66,6 +68,7 @@ Layout { logical_position: None, default_fg: None, default_bg: None, + purpose: None, }, ], ), @@ -94,6 +97,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -112,6 +116,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [ @@ -130,6 +135,7 @@ Layout { logical_position: None, default_fg: None, default_bg: None, + purpose: None, }, FloatingPaneLayout { name: None, @@ -146,6 +152,7 @@ Layout { logical_position: None, default_fg: None, default_bg: None, + purpose: None, }, ], ), @@ -172,6 +179,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap index d53bea4..4c37b1d 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap index eeaa402..5c1c48a 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap index 1fabddc..b6f844f 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_have_a_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap index 82e52f5..253ef6b 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap index d319e47..f649d46 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_command_without_cwd_receives_its_consumers_bare_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap index c2866ca..04a160c 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -56,6 +57,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -113,6 +116,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap index f005e61..b75376b 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_with_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap index 19a37c7..1c0055e 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_command_without_cwd.snap @@ -44,6 +44,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -66,6 +67,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -111,6 +113,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -133,6 +136,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap index 0134ce5..cdf44fc 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_bare_propagated_to_its_consumer_edit.snap @@ -38,6 +38,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -60,6 +61,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -99,6 +101,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -121,6 +124,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap index 7f3fb61..7280dc8 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__pane_template_with_command_propagated_to_its_consumer_edit.snap @@ -38,6 +38,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -60,6 +61,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -99,6 +101,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -121,6 +124,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap index 3800b83..187a4a0 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_given_to_panes_without_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -118,6 +121,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap index ab914f9..61f25fb 100644 --- a/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap +++ b/sl0ppij/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__tab_cwd_prepended_to_panes_with_cwd.snap @@ -34,6 +34,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, TiledPaneLayout { @@ -69,6 +70,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, ], @@ -91,6 +93,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], @@ -118,6 +121,7 @@ Layout { default_bg: None, status_bar: None, status_bar_buttons: None, + purpose: None, children_arrangement: None, }, [], diff --git a/sl0ppij/zellij-utils/src/ipc/protobuf_conversion.rs b/sl0ppij/zellij-utils/src/ipc/protobuf_conversion.rs index 0c26165..f1deb3f 100644 --- a/sl0ppij/zellij-utils/src/ipc/protobuf_conversion.rs +++ b/sl0ppij/zellij-utils/src/ipc/protobuf_conversion.rs @@ -4502,6 +4502,7 @@ impl TryFrom<crate::client_server_contract::client_server_contract::TiledPaneLay }); Ok(TiledPaneLayout { + purpose: None, // no protobuf representation children_split_direction, name: layout.name, children: children?, @@ -4543,6 +4544,7 @@ impl TryFrom<crate::client_server_contract::client_server_contract::FloatingPane let y = layout.y.map(|y| y.try_into()).transpose()?; Ok(crate::input::layout::FloatingPaneLayout { + purpose: None, // no protobuf representation name: layout.name, height, width, diff --git a/sl0ppij/zellij-utils/src/ipc/tests/roundtrip_tests.rs b/sl0ppij/zellij-utils/src/ipc/tests/roundtrip_tests.rs index a9eadf0..5210e78 100644 --- a/sl0ppij/zellij-utils/src/ipc/tests/roundtrip_tests.rs +++ b/sl0ppij/zellij-utils/src/ipc/tests/roundtrip_tests.rs @@ -2127,6 +2127,7 @@ fn test_client_messages() { ..Default::default() }, FloatingPaneLayout { + purpose: None, name: Some("third floating layout".to_owned()), height: Some(PercentOrFixed::Percent(10)), width: Some(PercentOrFixed::Fixed(20)), diff --git a/sl0ppij/zellij-utils/src/kdl/kdl_layout_parser.rs b/sl0ppij/zellij-utils/src/kdl/kdl_layout_parser.rs index 643d268..9e82384 100644 --- a/sl0ppij/zellij-utils/src/kdl/kdl_layout_parser.rs +++ b/sl0ppij/zellij-utils/src/kdl/kdl_layout_parser.rs @@ -111,6 +111,7 @@ impl<'a> KdlLayoutParser<'a> { || property_name == "arrangement" || property_name == "status_bar" || property_name == "status_bar_buttons" + || property_name == "purpose" } fn is_a_valid_floating_pane_property(&self, property_name: &str) -> bool { property_name == "borderless" @@ -131,6 +132,7 @@ impl<'a> KdlLayoutParser<'a> { || property_name == "contents_file" || property_name == "default_fg" || property_name == "default_bg" + || property_name == "purpose" } fn is_a_valid_tab_property(&self, property_name: &str) -> bool { property_name == "focus" @@ -577,6 +579,8 @@ impl<'a> KdlLayoutParser<'a> { // Restored from a serialised session. Sanitised again on the way in: a // layout file on disk is no more trustworthy than the escape sequence // that produced it, and it may have been hand-edited since. + let purpose = kdl_get_string_property_or_child_value_with_error!(kdl_node, "purpose") + .and_then(|s| crate::input::layout::sanitize_pane_purpose(s)); let status_bar = kdl_get_string_property_or_child_value_with_error!(kdl_node, "status_bar") .map(|s| crate::input::layout::sanitize_status_bar_text(s)) .filter(|s| !s.is_empty()); @@ -643,6 +647,7 @@ impl<'a> KdlLayoutParser<'a> { default_bg, status_bar, status_bar_buttons, + purpose, children_arrangement, ..Default::default() }) @@ -668,6 +673,8 @@ impl<'a> KdlLayoutParser<'a> { .map(|s| s.to_string()); let default_bg = kdl_get_string_property_or_child_value_with_error!(kdl_node, "default_bg") .map(|s| s.to_string()); + let purpose = kdl_get_string_property_or_child_value_with_error!(kdl_node, "purpose") + .and_then(|s| crate::input::layout::sanitize_pane_purpose(s)); self.assert_no_mixed_children_and_properties(kdl_node)?; let pane_initial_contents = contents_file.and_then(|contents_file| { self.file_name @@ -690,6 +697,7 @@ impl<'a> KdlLayoutParser<'a> { pane_initial_contents, default_fg, default_bg, + purpose, ..Default::default() }) } diff --git a/sl0ppij/zellij-utils/src/plugin_api/action.rs b/sl0ppij/zellij-utils/src/plugin_api/action.rs index edc9ce6..e3cd29f 100644 --- a/sl0ppij/zellij-utils/src/plugin_api/action.rs +++ b/sl0ppij/zellij-utils/src/plugin_api/action.rs @@ -3096,7 +3096,11 @@ impl TryFrom<ProtobufTiledPaneLayout> for TiledPaneLayout { } }); let run_instructions_to_ignore = vec![]; // Not serialized in protobuf + // Not serialized in protobuf: plugins have no use for a pane purpose and + // adding a proto field would force regenerating the committed assets. + let purpose = None; Ok(TiledPaneLayout { + purpose, children_split_direction, name: protobuf.name, children, @@ -3162,6 +3166,7 @@ impl TryFrom<ProtobufFloatingPaneLayout> for FloatingPaneLayout { let y = protobuf.y.map(|y| y.try_into()).transpose()?; let run = protobuf.run.map(|r| r.try_into()).transpose()?; Ok(FloatingPaneLayout { + purpose: None, // no protobuf representation name: protobuf.name, height, width, diff --git a/sl0ppij/zellij-utils/src/session_serialization.rs b/sl0ppij/zellij-utils/src/session_serialization.rs index a611569..2b3f651 100644 --- a/sl0ppij/zellij-utils/src/session_serialization.rs +++ b/sl0ppij/zellij-utils/src/session_serialization.rs @@ -40,6 +40,8 @@ pub struct PaneLayoutManifest { pub default_bg: Option<String>, pub status_bar: Option<String>, pub status_bar_buttons: Option<String>, + /// Opaque agent-facing hint; see `TiledPaneLayout::purpose`. + pub purpose: Option<String>, } pub fn serialize_session_layout( @@ -201,6 +203,11 @@ fn serialize_tiled_pane( .entries_mut() .push(KdlEntry::new_prop("status_bar", status_bar.to_owned())); } + if let Some(ref purpose) = layout.purpose { + tiled_pane_node + .entries_mut() + .push(KdlEntry::new_prop("purpose", purpose.to_owned())); + } if let Some(ref buttons) = layout.status_bar_buttons { tiled_pane_node .entries_mut() @@ -693,6 +700,11 @@ fn serialize_floating_pane( .entries_mut() .push(KdlEntry::new_prop("default_bg", bg.to_owned())); } + if let Some(ref purpose) = layout.purpose { + floating_pane_node + .entries_mut() + .push(KdlEntry::new_prop("purpose", purpose.to_owned())); + } serialize_start_suspended(&command, &mut floating_pane_node_children); serialize_floating_layout_attributes(&layout, &mut floating_pane_node_children); serialize_args(args, &mut floating_pane_node_children); @@ -755,6 +767,7 @@ fn tiled_pane_layout_from_manifest( default_bg, status_bar, status_bar_buttons, + purpose, ) = manifest .map(|g| { let mut run = g.run.clone(); @@ -776,9 +789,12 @@ fn tiled_pane_layout_from_manifest( g.default_bg.clone(), g.status_bar.clone(), g.status_bar_buttons.clone(), + g.purpose.clone(), ) }) - .unwrap_or((None, None, false, None, None, None, None, None, None, None)); + .unwrap_or(( + None, None, false, None, None, None, None, None, None, None, None, + )); TiledPaneLayout { split_size, run, @@ -791,6 +807,7 @@ fn tiled_pane_layout_from_manifest( default_bg, status_bar, status_bar_buttons, + purpose, ..Default::default() } } @@ -897,6 +914,7 @@ fn get_floating_panes_layout_from_panegeoms( focus: Some(m.is_focused), already_running: false, pane_initial_contents: m.pane_contents.clone(), + purpose: m.purpose.clone(), logical_position: None, borderless: Some(m.is_borderless), default_fg: m.default_fg.clone(), @@ -1246,6 +1264,68 @@ mod tests { ); } + #[test] + fn sl0p_pane_purpose_survives_serialisation_and_parses_back() { + // A workspace that forgets what its panes were for after a restart is not + // a workspace, so purpose has to round-trip like status_bar does. + let panes: Vec<PaneLayoutManifest> = PANEGEOMS_JSON[0] + .iter() + .map(|pg| parse_panegeom_from_json(pg)) + .enumerate() + .map(|(i, geom)| PaneLayoutManifest { + geom, + purpose: if i == 1 { + Some(String::from("dev-server")) + } else { + None + }, + ..Default::default() + }) + .collect(); + let global = GlobalLayoutManifest { + tabs: vec![( + String::from("Tab #1"), + TabLayoutManifest { + tiled_panes: panes, + ..Default::default() + }, + )], + ..Default::default() + }; + let (kdl, _) = serialize_session_layout(global).expect("serialisation failed"); + assert!( + kdl.contains("purpose=\"dev-server\""), + "purpose should be written into the serialised layout, got:\n{}", + kdl + ); + + let layout = + crate::input::layout::Layout::from_kdl(&kdl, Some("session.kdl".into()), None, None) + .expect("the serialised layout should parse"); + let found = layout + .tabs + .iter() + .flat_map(|(_name, tiled, _floating)| collect_purposes(tiled)) + .collect::<Vec<String>>(); + assert_eq!( + found, + vec![String::from("dev-server")], + "the parsed layout should carry the purpose back" + ); + } + + #[cfg(test)] + fn collect_purposes(layout: &crate::input::layout::TiledPaneLayout) -> Vec<String> { + let mut found = vec![]; + if let Some(purpose) = &layout.purpose { + found.push(purpose.clone()); + } + for child in &layout.children { + found.extend(collect_purposes(child)); + } + found + } + #[cfg(test)] fn collect_status_bars(layout: &crate::input::layout::TiledPaneLayout) -> Vec<String> { let mut found = vec![]; |
