diff options
Diffstat (limited to 'zellij-utils/src/input')
30 files changed, 126 insertions, 23 deletions
diff --git a/zellij-utils/src/input/actions.rs b/zellij-utils/src/input/actions.rs index f63390ad7..189f3cd96 100644 --- a/zellij-utils/src/input/actions.rs +++ b/zellij-utils/src/input/actions.rs @@ -260,11 +260,13 @@ impl Action { floating, name, close_on_exit, + start_suspended, } => { if !command.is_empty() { let mut command = command.clone(); let (command, args) = (PathBuf::from(command.remove(0)), command); let cwd = cwd.or_else(|| std::env::current_dir().ok()); + let hold_on_start = start_suspended; let hold_on_close = !close_on_exit; let run_command_action = RunCommandAction { command, @@ -272,6 +274,7 @@ impl Action { cwd, direction, hold_on_close, + hold_on_start, }; if floating { Ok(vec![Action::NewFloatingPane( diff --git a/zellij-utils/src/input/command.rs b/zellij-utils/src/input/command.rs index abb7c1e7f..14b87755f 100644 --- a/zellij-utils/src/input/command.rs +++ b/zellij-utils/src/input/command.rs @@ -19,6 +19,8 @@ pub struct RunCommand { pub cwd: Option<PathBuf>, #[serde(default)] pub hold_on_close: bool, + #[serde(default)] + pub hold_on_start: bool, } impl std::fmt::Display for RunCommand { @@ -50,6 +52,8 @@ pub struct RunCommandAction { pub direction: Option<Direction>, #[serde(default)] pub hold_on_close: bool, + #[serde(default)] + pub hold_on_start: bool, } impl From<RunCommandAction> for RunCommand { @@ -59,6 +63,7 @@ impl From<RunCommandAction> for RunCommand { args: action.args, cwd: action.cwd, hold_on_close: action.hold_on_close, + hold_on_start: action.hold_on_start, } } } diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs index fa50237a9..38806c21a 100644 --- a/zellij-utils/src/input/layout.rs +++ b/zellij-utils/src/input/layout.rs @@ -142,7 +142,7 @@ impl Run { } } pub fn add_close_on_exit(&mut self, close_on_exit: Option<bool>) { - // overrides the args of a Run::Command if they are Some + // overrides the hold_on_close of a Run::Command if it is Some // and not empty if let Some(close_on_exit) = close_on_exit { if let Run::Command(run_command) = self { @@ -150,6 +150,15 @@ impl Run { } } } + pub fn add_start_suspended(&mut self, start_suspended: Option<bool>) { + // overrides the hold_on_start of a Run::Command if they are Some + // and not empty + if let Some(start_suspended) = start_suspended { + if let Run::Command(run_command) = self { + run_command.hold_on_start = start_suspended; + } + } + } } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] diff --git a/zellij-utils/src/input/unit/layout_test.rs b/zellij-utils/src/input/unit/layout_test.rs index 9614eef46..f11c86869 100644 --- a/zellij-utils/src/input/unit/layout_test.rs +++ b/zellij-utils/src/input/unit/layout_test.rs @@ -282,6 +282,19 @@ fn layout_with_command_panes_and_close_on_exit() { } #[test] +fn layout_with_command_panes_and_start_suspended() { + let kdl_layout = r#" + layout { + pane command="htop" { + start_suspended true + } + } + "#; + let layout = Layout::from_kdl(kdl_layout, "layout_file_name".into(), None).unwrap(); + assert_snapshot!(format!("{:#?}", layout)); +} + +#[test] fn layout_with_plugin_panes() { let kdl_layout = r#" layout { diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap index 6ff62582d..8b6d9050f 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_added_to_args_in_template.snap @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1050 +assertion_line: 1081 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -23,6 +23,7 @@ Layout { args: [], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), @@ -45,6 +46,7 @@ Layout { ], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap index 4a449d35a..4b026d751 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__args_override_args_in_template.snap @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1033 +assertion_line: 1046 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -26,6 +26,7 @@ Layout { ], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), @@ -48,6 +49,7 @@ Layout { ], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap index da83cc62c..d23bb40c5 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_added_to_close_on_exit_in_template.snap @@ -23,6 +23,7 @@ Layout { args: [], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), @@ -42,6 +43,7 @@ Layout { args: [], cwd: None, hold_on_close: false, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap index 3cb80cf74..abce2964d 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__close_on_exit_overrides_close_on_exit_in_template.snap @@ -23,6 +23,7 @@ Layout { args: [], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), @@ -42,6 +43,7 @@ Layout { args: [], cwd: None, hold_on_close: false, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap index 3c26fbdd6..48bb11838 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_added_to_cwd_in_template.snap @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1085 +assertion_line: 1133 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -23,6 +23,7 @@ Layout { args: [], cwd: None, hold_on_close: true, + hold_on_start: false, }, ), ), @@ -44,6 +45,7 @@ Layout { "/home", ), hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap index fd1bc15a1..7d57e6d06 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__cwd_override_cwd_in_template.snap @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1068 +assertion_line: 1116 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -25,6 +25,7 @@ Layout { "/tmp", ), hold_on_close: true, + hold_on_start: false, }, ), ), @@ -46,6 +47,7 @@ Layout { "/", ), hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/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/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 a83674d2d..58a786789 100644 --- a/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/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 @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1441 +assertion_line: 1516 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -39,6 +39,7 @@ Layout { "/tmp/./foo/./bar", ), hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/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/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 8381dcd1d..c6b3ed5f4 100644 --- a/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/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 @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1462 +assertion_line: 1537 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -43,6 +43,7 @@ Layout { "/tmp/./foo/./bar", ), hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/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/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 65f287042..cd1a51e1d 100644 --- a/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/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 @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1481 +assertion_line: 1556 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -39,6 +39,7 @@ Layout { "/tmp/./foo/./bar", ), hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap index 548ae756f..ba246e06d 100644 --- a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap +++ b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_given_to_panes_without_cwd.snap @@ -1,6 +1,6 @@ --- source: zellij-utils/src/input/./unit/layout_test.rs -assertion_line: 1283 +assertion_line: 1403 expression: "format!(\"{:#?}\", layout)" --- Layout { @@ -39,6 +39,7 @@ Layout { "/tmp", ), hold_on_close: true, + hold_on_start: false, }, ), ), diff --git a/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap b/zellij-utils/src/input/unit/snapshots/zellij_utils__input__layout__layout_test__global_cwd_passed_from_layout_constructor.snap index d88a8ecec..3b546891e 100644 --- a/ |