aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-07-18 10:45:42 +0200
committerGitHub <noreply@github.com>2024-07-18 10:45:42 +0200
commit2deffc3289ff05a1429366cfa7cf7195ec27034f (patch)
tree5e8af968db1c5bb966bfe25b484c001378ab9351 /zellij-utils/src
parentdocs(changelog): configuration screen (diff)
downloadsl0ppij-2deffc3289ff05a1429366cfa7cf7195ec27034f.tar.gz
sl0ppij-2deffc3289ff05a1429366cfa7cf7195ec27034f.tar.xz
sl0ppij-2deffc3289ff05a1429366cfa7cf7195ec27034f.zip
feat(plugins): add stringified layout to switch_session_with_layout (#3503)
Diffstat (limited to 'zellij-utils/src')
-rw-r--r--zellij-utils/src/data.rs3
-rw-r--r--zellij-utils/src/input/layout.rs35
-rw-r--r--zellij-utils/src/input/unit/layout_test.rs192
-rw-r--r--zellij-utils/src/kdl/kdl_layout_parser.rs28
-rw-r--r--zellij-utils/src/kdl/mod.rs18
-rw-r--r--zellij-utils/src/plugin_api/event.rs5
6 files changed, 158 insertions, 123 deletions
diff --git a/zellij-utils/src/data.rs b/zellij-utils/src/data.rs
index 1a3c9881..0ebb6f1b 100644
--- a/zellij-utils/src/data.rs
+++ b/zellij-utils/src/data.rs
@@ -1184,6 +1184,7 @@ pub enum LayoutInfo {
BuiltIn(String),
File(String),
Url(String),
+ Stringified(String),
}
impl LayoutInfo {
@@ -1192,6 +1193,7 @@ impl LayoutInfo {
LayoutInfo::BuiltIn(name) => &name,
LayoutInfo::File(name) => &name,
LayoutInfo::Url(url) => &url,
+ LayoutInfo::Stringified(layout) => &layout,
}
}
pub fn is_builtin(&self) -> bool {
@@ -1199,6 +1201,7 @@ impl LayoutInfo {
LayoutInfo::BuiltIn(_name) => true,
LayoutInfo::File(_name) => false,
LayoutInfo::Url(_url) => false,
+ LayoutInfo::Stringified(_stringified) => false,
}
}
}
diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs
index 82207725..7dc3bc63 100644
--- a/zellij-utils/src/input/layout.rs
+++ b/zellij-utils/src/input/layout.rs
@@ -1142,15 +1142,20 @@ impl Layout {
let (path_to_raw_layout, raw_layout, raw_swap_layouts) = match layout_info {
LayoutInfo::File(layout_name_without_extension) => {
let layout_dir = layout_dir.clone().or_else(|| default_layout_dir());
- Self::stringified_from_dir(
- &PathBuf::from(layout_name_without_extension),
- layout_dir.as_ref(),
- )?
+ let (path_to_layout, stringified_layout, swap_layouts) =
+ Self::stringified_from_dir(
+ &PathBuf::from(layout_name_without_extension),
+ layout_dir.as_ref(),
+ )?;
+ (Some(path_to_layout), stringified_layout, swap_layouts)
},
LayoutInfo::BuiltIn(layout_name) => {
- Self::stringified_from_default_assets(&PathBuf::from(layout_name))?
+ let (path_to_layout, stringified_layout, swap_layouts) =
+ Self::stringified_from_default_assets(&PathBuf::from(layout_name))?;
+ (Some(path_to_layout), stringified_layout, swap_layouts)
},
- LayoutInfo::Url(url) => (url.clone(), Self::stringified_from_url(&url)?, None),
+ LayoutInfo::Url(url) => (Some(url.clone()), Self::stringified_from_url(&url)?, None),
+ LayoutInfo::Stringified(stringified_layout) => (None, stringified_layout, None),
};
Layout::from_kdl(
&raw_layout,
@@ -1208,7 +1213,7 @@ impl Layout {
Layout::stringified_from_path_or_default(layout_path, layout_dir)?;
let layout = Layout::from_kdl(
&raw_layout,
- path_to_raw_layout,
+ Some(path_to_raw_layout),
raw_swap_layouts
.as_ref()
.map(|(r, f)| (r.as_str(), f.as_str())),
@@ -1226,10 +1231,18 @@ impl Layout {
Err(e) => Err(ConfigError::DownloadError(format!("{}", e))),
}
})?;
- let layout = Layout::from_kdl(&raw_layout, url.into(), None, None)?;
+ let layout = Layout::from_kdl(&raw_layout, Some(url.into()), None, None)?;
let config = Config::from_kdl(&raw_layout, Some(config))?; // this merges the two config, with
Ok((layout, config))
}
+ pub fn from_stringified_layout(
+ stringified_layout: &str,
+ config: Config,
+ ) -> Result<(Layout, Config), ConfigError> {
+ let layout = Layout::from_kdl(&stringified_layout, None, None, None)?;
+ let config = Config::from_kdl(&stringified_layout, Some(config))?; // this merges the two config, with
+ Ok((layout, config))
+ }
#[cfg(target_family = "wasm")]
pub fn from_url(url: &str, config: Config) -> Result<(Layout, Config), ConfigError> {
Err(ConfigError::DownloadError(format!(
@@ -1244,7 +1257,7 @@ impl Layout {
Layout::stringified_from_path_or_default(layout_path, layout_dir)?;
let layout = Layout::from_kdl(
&raw_layout,
- path_to_raw_layout,
+ Some(path_to_raw_layout),
raw_swap_layouts
.as_ref()
.map(|(r, f)| (r.as_str(), f.as_str())),
@@ -1261,7 +1274,7 @@ impl Layout {
Layout::stringified_from_default_assets(layout_name)?;
let layout = Layout::from_kdl(
&raw_layout,
- path_to_raw_layout,
+ Some(path_to_raw_layout),
raw_swap_layouts
.as_ref()
.map(|(r, f)| (r.as_str(), f.as_str())),
@@ -1276,7 +1289,7 @@ impl Layout {
swap_layouts: Option<(&str, &str)>, // Option<path_to_swap_layout, stringified_swap_layout>
cwd: Option<PathBuf>,
) -> Result<Layout, ConfigError> {
- Layout::from_kdl(raw, path_to_raw_layout, swap_layouts, cwd)
+ Layout::from_kdl(raw, Some(path_to_raw_layout), swap_layouts, cwd)
}
pub fn stringified_from_dir(
layout: &PathBuf,
diff --git a/zellij-utils/src/input/unit/layout_test.rs b/zellij-utils/src/input/unit/layout_test.rs
index e2d91c17..d13dd2c0 100644
--- a/zellij-utils/src/input/unit/layout_test.rs
+++ b/zellij-utils/src/input/unit/layout_test.rs
@@ -4,7 +4,7 @@ use insta::assert_snapshot;
#[test]
fn empty_layout() {
let kdl_layout = "layout";
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((TiledPaneLayout::default(), vec![])),
..Default::default()
@@ -19,7 +19,7 @@ fn layout_with_one_pane() {
pane
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -42,7 +42,7 @@ fn layout_with_multiple_panes() {
pane
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -74,7 +74,7 @@ fn layout_with_nested_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -115,7 +115,7 @@ fn layout_with_floating_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout::default(),
@@ -159,7 +159,7 @@ fn layout_with_mixed_panes_and_floating_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -186,7 +186,7 @@ fn layout_with_hidden_floating_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
tabs: vec![(
None,
@@ -218,7 +218,7 @@ fn layout_with_floating_panes_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -253,7 +253,7 @@ fn layout_with_shared_tiled_and_floating_panes_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -301,7 +301,7 @@ fn layout_with_tabs_and_floating_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -312,7 +312,7 @@ fn layout_with_tabs() {
tab
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
tabs: vec![(None, TiledPaneLayout::default(), vec![])],
template: Some((TiledPaneLayout::default(), vec![])),
@@ -336,7 +336,7 @@ fn layout_with_nested_differing_tabs() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
tabs: vec![
(
@@ -378,7 +378,7 @@ fn layout_with_panes_in_different_mixed_split_sizes() {
pane size=2;
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -416,7 +416,7 @@ fn layout_with_command_panes() {
pane command="htop"
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -444,7 +444,7 @@ fn layout_with_command_panes_and_cwd() {
pane command="htop" cwd="/path/to/my/cwd"
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -475,7 +475,7 @@ fn layout_with_command_panes_and_cwd_and_args() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -507,7 +507,7 @@ fn layout_with_command_panes_and_close_on_exit() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -520,7 +520,7 @@ fn layout_with_command_panes_and_start_suspended() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -542,7 +542,7 @@ fn layout_with_plugin_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let mut expected_plugin_configuration = BTreeMap::new();
expected_plugin_configuration.insert("config_key_1".to_owned(), "config_value_1".to_owned());
expected_plugin_configuration.insert("2".to_owned(), "true".to_owned());
@@ -596,7 +596,7 @@ fn layout_with_borderless_panes() {
pane borderless=true
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -620,7 +620,7 @@ fn layout_with_focused_panes() {
pane focus=true
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -644,7 +644,7 @@ fn layout_with_pane_names() {
pane name="my awesome pane"
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -669,7 +669,7 @@ fn layout_with_tab_names() {
tab name="my cool tab name 2"
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
tabs: vec![
(
@@ -704,7 +704,7 @@ fn layout_with_focused_tab() {
tab
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
tabs: vec![
(None, TiledPaneLayout::default(), vec![]),
@@ -738,7 +738,7 @@ fn layout_with_tab_templates() {
one-above-one-below
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
tabs: vec![
(
@@ -815,7 +815,7 @@ fn layout_with_default_tab_template() {
tab
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -840,7 +840,7 @@ fn layout_with_new_tab_template() {
tab
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -867,7 +867,7 @@ fn layout_with_pane_templates() {
left-and-right
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -888,7 +888,7 @@ fn layout_with_tab_and_pane_templates() {
left-right-and-htop
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -909,7 +909,7 @@ fn layout_with_nested_pane_templates() {
left-and-right
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -935,7 +935,7 @@ fn layout_with_nested_branched_pane_templates() {
left-and-right
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -959,7 +959,7 @@ fn circular_dependency_pane_templates_error() {
one
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "circular dependency detected");
}
@@ -981,7 +981,7 @@ fn children_not_as_first_child_of_tab_template() {
horizontal-with-vertical-top
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1004,7 +1004,7 @@ fn error_on_more_than_one_children_block_in_tab_template() {
horizontal-with-vertical-top
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(
layout.is_err(),
"error provided for more than one children block"
@@ -1029,7 +1029,7 @@ fn children_not_as_first_child_of_pane_template() {
horizontal-with-vertical-top
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1052,7 +1052,7 @@ fn error_on_more_than_one_children_block_in_pane_template() {
horizontal-with-vertical-top
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(
layout.is_err(),
"error provided for more than one children block"
@@ -1081,7 +1081,7 @@ fn combined_tab_and_pane_template_both_with_children() {
horizontal-with-vertical-top
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1092,7 +1092,7 @@ fn layout_with_pane_excluded_from_sync() {
pane exclude_from_sync=true
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1108,7 +1108,7 @@ fn cannot_define_tab_template_name_with_space() {
pane
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -1124,7 +1124,7 @@ fn cannot_define_pane_template_name_with_space() {
pane
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -1138,7 +1138,7 @@ fn cannot_define_panes_and_tabs_on_same_level() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(
layout.is_err(),
"error provided for tab and pane on the same level"
@@ -1172,7 +1172,7 @@ fn cannot_define_tab_template_names_as_keywords() {
",
keyword
);
- let layout = Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None);
assert!(
layout.is_err(),
"{}",
@@ -1210,7 +1210,7 @@ fn cannot_define_pane_template_names_as_keywords() {
",
keyword
);
- let layout = Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None);
assert!(
layout.is_err(),
"{}",
@@ -1231,7 +1231,7 @@ fn error_on_multiple_layout_nodes_in_file() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1247,7 +1247,7 @@ fn error_on_unknown_layout_node() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1261,7 +1261,7 @@ fn error_on_unknown_layout_pane_property() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1275,7 +1275,7 @@ fn error_on_unknown_layout_pane_template_property() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1289,7 +1289,7 @@ fn error_on_unknown_layout_tab_property() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1303,7 +1303,7 @@ fn error_on_unknown_layout_tab_template_property() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1321,7 +1321,7 @@ fn error_on_pane_templates_without_a_name() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1339,7 +1339,7 @@ fn error_on_tab_templates_without_a_name() {
"
);
let layout_error =
- Layout::from_kdl(&kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(&kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1353,7 +1353,7 @@ fn error_on_more_than_one_focused_tab() {
}
"#;
let layout_error =
- Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap_err();
+ Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap_err();
assert_snapshot!(format!("{:?}", layout_error));
}
@@ -1371,7 +1371,7 @@ fn args_override_args_in_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1389,7 +1389,7 @@ fn close_on_exit_overrides_close_on_exit_in_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1406,7 +1406,7 @@ fn args_added_to_args_in_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1423,7 +1423,7 @@ fn close_on_exit_added_to_close_on_exit_in_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1441,7 +1441,7 @@ fn cwd_override_cwd_in_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1458,7 +1458,7 @@ fn cwd_added_to_cwd_in_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1471,7 +1471,7 @@ fn error_on_mixed_command_and_child_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided");
}
@@ -1485,7 +1485,7 @@ fn error_on_mixed_cwd_and_child_panes() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided");
}
@@ -1498,7 +1498,7 @@ fn error_on_bare_args_without_command() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided");
}
@@ -1511,7 +1511,7 @@ fn error_on_bare_close_on_exit_without_command() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided");
}
@@ -1525,7 +1525,7 @@ fn error_on_bare_args_in_template_without_command() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided");
}
@@ -1539,7 +1539,7 @@ fn error_on_bare_close_on_exit_in_template_without_command() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided");
}
@@ -1558,7 +1558,7 @@ fn pane_template_command_with_cwd_overriden_by_its_consumers_command_cwd() {
// pane should have /tmp/foo and not /tmp/bar as cwd
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1575,7 +1575,7 @@ fn pane_template_command_with_cwd_remains_when_its_consumer_command_does_not_hav
// pane should have /tmp/bar as its cwd with the pwd command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1593,7 +1593,7 @@ fn pane_template_command_without_cwd_is_overriden_by_its_consumers_cwd() {
// pane should have /tmp/bar as its cwd with the pwd command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1612,7 +1612,7 @@ fn pane_template_command_with_cwd_is_overriden_by_its_consumers_bare_cwd() {
// pane should have /tmp/bar as its cwd with the tail command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1630,7 +1630,7 @@ fn pane_template_command_without_cwd_receives_its_consumers_bare_cwd() {
// pane should have /tmp/bar as its cwd with the tail command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1648,7 +1648,7 @@ fn pane_template_with_bare_cwd_overriden_by_its_consumers_bare_cwd() {
// pane should have /tmp/foo without a command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1664,7 +1664,7 @@ fn pane_template_with_bare_propagated_to_its_consumer_command_without_cwd() {
// pane should have /tmp/foo with the tail command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1682,7 +1682,7 @@ fn pane_template_with_bare_propagated_to_its_consumer_command_with_cwd() {
// pane should have /tmp/bar with the tail command
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1698,7 +1698,7 @@ fn pane_template_with_bare_propagated_to_its_consumer_edit() {
// pane should have /tmp/foo/bar with the edit file variant
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1714,7 +1714,7 @@ fn pane_template_with_command_propagated_to_its_consumer_edit() {
// pane should have /tmp/foo/bar with the edit file variant
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1728,7 +1728,7 @@ fn global_cwd_given_to_panes_without_cwd() {
// both should have the /tmp cwd
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1741,7 +1741,7 @@ fn global_cwd_prepended_to_panes_with_cwd() {
pane command="tail" cwd="/home/foo" // should be /home/foo because its an absolute path
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1757,7 +1757,7 @@ fn global_cwd_passed_from_layout_constructor() {
"#;
let layout = Layout::from_kdl(
kdl_layout,
- "layout_file_name".into(),
+ Some("layout_file_name".into()),
None,
Some(PathBuf::from("/tmp")),
)
@@ -1778,7 +1778,7 @@ fn global_cwd_passed_from_layout_constructor_overrides_global_cwd_in_layout_file
"#;
let layout = Layout::from_kdl(
kdl_layout,
- "layout_file_name".into(),
+ Some("layout_file_name".into()),
None,
Some(PathBuf::from("/tmp")),
)
@@ -1798,7 +1798,7 @@ fn global_cwd_with_tab_cwd_given_to_panes_without_cwd() {
// both should have the /tmp/foo cwd
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1813,7 +1813,7 @@ fn tab_cwd_given_to_panes_without_cwd() {
// both should have the /tmp cwd
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1828,7 +1828,7 @@ fn tab_cwd_prepended_to_panes_with_cwd() {
// both should have the /tmp/foo cwd
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1843,7 +1843,7 @@ fn global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1864,7 +1864,7 @@ fn global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_pane_templa
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1883,7 +1883,7 @@ fn global_cwd_and_tab_cwd_prepended_to_panes_with_and_without_cwd_in_tab_templat
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1930,7 +1930,7 @@ fn can_load_swap_layouts_from_a_different_file() {
"#;
let layout = Layout::from_kdl(
kdl_layout,
- "layout_file_name".into(),
+ Some("layout_file_name".into()),
Some(("swap_layout_file_name".into(), kdl_swap_layout)),
None,
)
@@ -1948,7 +1948,7 @@ fn can_define_stacked_children_for_pane_node() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1965,7 +1965,7 @@ fn can_define_stacked_children_for_pane_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1980,7 +1980,7 @@ fn can_define_a_stack_with_an_expanded_pane() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
assert_snapshot!(format!("{:#?}", layout));
}
@@ -1991,7 +1991,7 @@ fn cannot_define_stacked_panes_for_bare_node() {
pane stacked=true
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -2005,7 +2005,7 @@ fn cannot_define_an_expanded_pane_outside_of_a_stack() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -2019,7 +2019,7 @@ fn cannot_define_stacked_panes_with_vertical_split_direction() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -2036,7 +2036,7 @@ fn cannot_define_stacked_panes_with_grandchildren() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -2056,7 +2056,7 @@ fn cannot_define_stacked_panes_with_grandchildren_in_pane_template() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "error provided for tab name with space");
}
@@ -2090,7 +2090,7 @@ fn run_plugin_location_parsing() {
}
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None).unwrap();
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None).unwrap();
let expected_layout = Layout {
template: Some((
TiledPaneLayout {
@@ -2218,7 +2218,7 @@ fn env_var_expansion() {
old_vars.push((key, std::env::var(key).ok()));
std::env::set_var(key, value);
}
- let layout = Layout::from_kdl(raw_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(raw_layout, Some("layout_file_name".into()), None, None);
// restore environment.
for (key, opt) in old_vars {
match opt {
@@ -2239,6 +2239,6 @@ fn env_var_missing() {
pane cwd="relative"
}
"#;
- let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None, None);
+ let layout = Layout::from_kdl(kdl_layout, Some("layout_file_name".into()), None, None);
assert!(layout.is_err(), "invalid env var lookup should fail");
}
diff --git a/zellij-utils/src/kdl/kdl_layout_parser.rs b/zellij-utils/src/kdl/kdl_layout_parser.rs
index 1a53308e..b2952501 100644
--- a/zellij-utils/src/kdl/kdl_layout_parser.rs
+++ b/zellij-utils/src/kdl/kdl_layout_parser.rs
@@ -40,11 +40,15 @@ pub struct KdlLayoutParser<'a> {
pane_templates: HashMap<String, (PaneOrFloatingPane, KdlNode)>,
default_tab_template: Option<(TiledPaneLayout, Vec<FloatingPaneLayout>, KdlNode)>,
new_tab_template: Option<(TiledPaneLayout, Vec<FloatingPaneLayout>)>,
- file_name: PathBuf,
+ file_name: Option<PathBuf>,
}
impl<'a> KdlLayoutParser<'a> {
- pub fn new(raw_layout: &'a str, global_cwd: Option<PathBuf>, file_name: String) -> Self {
+ pub fn new(
+ raw_layout: &'a str,
+ global_cwd: Option<PathBuf>,
+ file_name: Option<String>,
+ ) -> Self {
KdlLayoutParser {
raw_layout,
tab_templates: HashMap::new(),
@@ -52,7 +56,7 @@ impl<'a> KdlLayoutParser<'a> {
default_tab_template: None,
new_tab_template: None,
global_cwd,
- file_name: PathBuf::from(file_name),
+ file_name: file_name.map(|f| PathBuf::from(f)),
}
}
fn is_a_reserved_word(&self, word: &str) -> bool {
@@ -559,9 +563,12 @@ impl<'a> KdlLayoutParser<'a> {
}
self.assert_no_mixed_children_and_properties(kdl_node)?;
let pane_initial_contents = contents_file.and_then(|contents_file| {
- self.file_name.parent().and_then(|parent_folder| {
- std::fs::read_to_string(parent_folder.join(contents_file)).ok()
- })
+ self.file_name
+ .as_ref()
+ .and_then(|f| f.parent())
+ .and_then(|parent_folder| {
+ std::fs::read_to_string(parent_folder.join(contents_file)).ok()
+ })
});
Ok(TiledPaneLayout {
borderless: borderless.unwrap_or_default(),
@@ -596,9 +603,12 @@ impl<'a> KdlLayoutParser<'a> {
kdl_get_string_property_or_child_value_with_error!(kdl_node, "contents_file");
self.assert_no_mixed_children_and_properties(kdl_node)?;
let pane_initial_contents = contents_file.and_then(|contents_file| {
- self.file_name.parent().and_then(|parent_folder| {
- std::fs::read_to_string(parent_folder.join(contents_file)).ok()
- })
+ self.file_name
+ .as_ref()
+ .and_then(|f| f.parent())
+ .and_then(|parent_folder| {
+ std::fs::read_to_string(parent_folder.join(contents_file)).ok()
+ })
});
Ok(FloatingPaneLayout {
name,
diff --git a/zellij-utils/src/kdl/mod.rs b/zellij-utils/src/kdl/mod.rs
index 02ef0ab8..95b534fd 100644
--- a/zellij-utils/src/kdl/mod.rs
+++ b/zellij-utils/src/kdl/mod.rs
@@ -1658,18 +1658,21 @@ impl Options {
impl Layout {
pub fn from_kdl(
raw_layout: &str,
- file_name: String,
+ file_name: Option<String>,
raw_swap_layouts: Option<(&str, &str)>, // raw_swap_layouts swap_layouts_file_name
cwd: Option<PathBuf>,
) -> Result<Self, ConfigError> {
let mut kdl_layout_parser = KdlLayoutParser::new(raw_layout, cwd, file_name.clone());
let layout = kdl_layout_parser.parse().map_err(|e| match e {
- ConfigError::KdlError(kdl_error) => {
- ConfigError::KdlError(kdl_error.add_src(file_name, String::from(raw_layout)))
- },
- ConfigError::KdlDeserializationError(kdl_error) => {
- kdl_layout_error(kdl_error, file_name, raw_layout)
- },
+ ConfigError::KdlError(kdl_error) => ConfigError::KdlError(kdl_error.add_src(
+ file_name.unwrap_or_else(|| "N/A".to_owned()),
+ String::from(raw_layout),
+ )),
+ ConfigError::KdlDeserializationError(kdl_error) => kdl_layout_error(
+ kdl_error,
+ file_name.unwrap_or_else(|| "N/A".to_owned()),
+ raw_layout,
+ ),
e => e,
})?;
match raw_swap_layouts {
@@ -2193,6 +2196,7 @@ impl SessionInfo {
LayoutInfo::File(name) => (name.clone(), "file"),
LayoutInfo::BuiltIn(name) => (name.clone(), "built-in"),
LayoutInfo::Url(url) => (url.clone(), "url"),
+ LayoutInfo::Stringified(stringified) => ("stringified-layout".to_owned(), "N/A"),
};
let mut layout_node = KdlNode::new(format!("{}", layout_name));
let layout_source = KdlEntry::new_prop("source", layout_source);
diff --git a/zellij-utils/src/plugin_api/event.rs b/zellij-utils/src/plugin_api/event.rs
index 1e793e66..7996801c 100644
--- a/zellij-utils/src/plugin_api/event.rs
+++ b/zellij-utils/src/plugin_api/event.rs
@@ -550,6 +550,10 @@ impl TryFrom<LayoutInfo> for ProtobufLayoutInfo {
source: "url".to_owned(),
name,
}),
+ LayoutInfo::Stringified(stringified_layout) => Ok(ProtobufLayoutInfo {
+ source: "stringified".to_owned(),
+ name: stringified_layout.clone(),
+ }),
}
}
}
@@ -561,6 +565,7 @@ impl TryFrom<ProtobufLayoutInfo> for LayoutInfo {
"file" => Ok(LayoutInfo::File(protobuf_layout_info.name)),
"built-in" => Ok(LayoutInfo::BuiltIn(protobuf_layout_info.name)),
"url" => Ok(LayoutInfo::Url(protobuf_layout_info.name)),
+ "stringified" => Ok(LayoutInfo::Stringified(protobuf_layout_info.name)),
_ => Err("Unknown source for layout"),
}
}