diff options
| author | Aram Drevekenin <aram@poor.dev> | 2024-07-18 10:45:42 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-18 10:45:42 +0200 |
| commit | 2deffc3289ff05a1429366cfa7cf7195ec27034f (patch) | |
| tree | 5e8af968db1c5bb966bfe25b484c001378ab9351 /zellij-utils/src | |
| parent | docs(changelog): configuration screen (diff) | |
| download | sl0ppij-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.rs | 3 | ||||
| -rw-r--r-- | zellij-utils/src/input/layout.rs | 35 | ||||
| -rw-r--r-- | zellij-utils/src/input/unit/layout_test.rs | 192 | ||||
| -rw-r--r-- | zellij-utils/src/kdl/kdl_layout_parser.rs | 28 | ||||
| -rw-r--r-- | zellij-utils/src/kdl/mod.rs | 18 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/event.rs | 5 |
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