Compare commits

...

4 Commits

Author SHA1 Message Date
Bruno Sutic 6df04051fe
Merge pull request #469 from ktprograms/restore-arguments-misc-fixes
Restore with command arguments misc fixes
2023-01-31 10:40:52 +01:00
kt programs 299c4aa8ce docs: add info on asterisk (*) restore option 2023-01-30 10:50:07 +08:00
kt programs b8ff2ea08b _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.
2023-01-30 10:37:15 +08:00
kt programs 4941cdb074 _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.
2023-01-30 10:37:15 +08:00
2 changed files with 20 additions and 2 deletions

View File

@ -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:

View File

@ -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() {
@ -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