From 4941cdb07498fd095f0d1d029113de1ddd4fc67c Mon Sep 17 00:00:00 2001 From: kt programs Date: Mon, 30 Jan 2023 10:33:50 +0800 Subject: [PATCH 1/3] _get_command_arguments: make trailing space optional When pane_full_command has no arguments, the regex doesn't find argv[0] as there is no trailing space. For example, if pane_full_command was "vim" and the restore option was "~Vim->vim *", the command "vim vim" would get executed instead of just "vim". Make the trailing space optional to match having only the command without arguments. --- scripts/process_restore_helpers.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/process_restore_helpers.sh b/scripts/process_restore_helpers.sh index 49d3844..8bf5a78 100644 --- a/scripts/process_restore_helpers.sh +++ b/scripts/process_restore_helpers.sh @@ -121,7 +121,7 @@ _get_command_arguments() { if _proc_starts_with_tildae "$match"; then match="$(remove_first_char "$match")" fi - echo "$pane_full_command" | sed "s,^.*${match}[^ ]* ,," + echo "$pane_full_command" | sed "s,^.*${match}[^ ]* *,," } _get_proc_restore_command() { From b8ff2ea08be920e626ad4ba158746e564dfc71b4 Mon Sep 17 00:00:00 2001 From: kt programs Date: Mon, 30 Jan 2023 10:31:13 +0800 Subject: [PATCH 2/3] _get_proc_restore_command: use "," as sed delimiter When command_arguments contains a path, there are too many delimiters for sed, which causes it to not replace properly. The result of this is that the original command gets executed without remapping and/or expanding the arguments. --- scripts/process_restore_helpers.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/process_restore_helpers.sh b/scripts/process_restore_helpers.sh index 8bf5a78..546dfe1 100644 --- a/scripts/process_restore_helpers.sh +++ b/scripts/process_restore_helpers.sh @@ -132,7 +132,7 @@ _get_proc_restore_command() { if [[ "$restore_element" =~ " ${inline_strategy_arguments_token}" ]]; then # replaces "%" with command arguments local command_arguments="$(_get_command_arguments "$pane_full_command" "$match")" - echo "$restore_element" | sed "s/${inline_strategy_arguments_token}/${command_arguments}/" + echo "$restore_element" | sed "s,${inline_strategy_arguments_token},${command_arguments}," else echo "$restore_element" fi From 299c4aa8ce95ed26520e06f09120d6a319999ac6 Mon Sep 17 00:00:00 2001 From: kt programs Date: Mon, 30 Jan 2023 10:46:24 +0800 Subject: [PATCH 3/3] docs: add info on asterisk (*) restore option --- docs/restoring_programs.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/restoring_programs.md b/docs/restoring_programs.md index c142fe5..6d316d6 100644 --- a/docs/restoring_programs.md +++ b/docs/restoring_programs.md @@ -28,6 +28,10 @@ contains space-separated list of additional programs to restore. set -g @resurrect-processes 'some_program "grunt->grunt development"' +- Use `*` to expand the arguments from the saved command when restoring: + + set -g @resurrect-processes 'some_program "~rails server->rails server *"' + - Don't restore any programs: set -g @resurrect-processes 'false' @@ -96,6 +100,20 @@ command name". Full (long) process name is now ignored and you'll see just `rails server` in the command line when the program is restored. +> What is asterisk `*` and why is it used? + +(Please read the above clarifications about tilde `~` and arrow `->`). + +Continuing with the `rails server` example, you might have added flags for e.g. +verbose logging, but with the above configuration, the flags would be lost. + +To preserve the command arguments when restoring, use the asterisk `*`: (**note**: there **must** be a space before `*`) + + set -g @resurrect-processes '"~rails server->rails server *"' + +This option says: "when this process is restored use `rails server` as the +command name, but preserve its arguments". + > Now I understand the tilde and the arrow, but things still don't work for me Here's the general workflow for figuring this out: