From 482fd2bfe3646c18ca2b5021bb2c7933b876b683 Mon Sep 17 00:00:00 2001 From: ss-raicangu Date: Thu, 24 Aug 2023 11:15:42 +1200 Subject: [PATCH] fix: turn off remain-on-exit only on fzf-tmux pane Using `fzf-tmux` overwrites `remain-on-exit` for all panes in a window, if it is only set globally or at a higher scope than window. set-option -wg remain-on-exit on set-option -s remain-on-exit on This makes other panes in that window close immediately on exit after using `fzf-tmux`, even though I expect them to remain open. Since TMux 3.0, `remain-on-exit` is a pane option that can be set via `set-option -p`. This will limit the option's scope to just the `fzf-tmux` pane, thus allowing us to close it immediately without overriding `remain-on-exit` on other panes in the window. Co-authored-by: Junegunn Choi Link: https://github.com/tmux/tmux/blob/11e69f6025f5783fe17d43247de1c3f659a19b69/CHANGES#L753-L760 Link: https://github.com/tmux/tmux/releases/tag/3.0 Related: https://github.com/junegunn/fzf/issues/3397 --- bin/fzf-tmux | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bin/fzf-tmux b/bin/fzf-tmux index ed255fc9..48c91bf2 100755 --- a/bin/fzf-tmux +++ b/bin/fzf-tmux @@ -151,7 +151,13 @@ argsf="${TMPDIR:-/tmp}/fzf-args-$id" fifo1="${TMPDIR:-/tmp}/fzf-fifo1-$id" fifo2="${TMPDIR:-/tmp}/fzf-fifo2-$id" fifo3="${TMPDIR:-/tmp}/fzf-fifo3-$id" -tmux_win_opts=( $(tmux show-window-options remain-on-exit \; show-window-options synchronize-panes | sed '/ off/d; s/^/set-window-option /; s/$/ \\;/') ) +if tmux_win_opts=$(tmux show-options -p remain-on-exit \; show-options -w synchronize-panes 2> /dev/null); then + tmux_win_opts=( $(sed '/ off/d; s/synchronize-panes/set-option -w synchronize-panes/; s/remain-on-exit/set-option -p remain-on-exit/; s/$/ \\;/' <<< "$tmux_win_opts") ) + tmux_off_opts='; set-option -w synchronize-panes off ; set-option -p remain-on-exit off' +else + tmux_win_opts=( $(tmux show-window-options remain-on-exit \; show-window-options synchronize-panes | sed '/ off/d; s/^/set-window-option /; s/$/ \\;/') ) + tmux_off_opts='; set-window-option synchronize-panes off ; set-window-option remain-on-exit off' +fi cleanup() { \rm -f $argsf $fifo1 $fifo2 $fifo3 @@ -227,9 +233,9 @@ else cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; echo \$? > $fifo3 $close" >> $argsf cat <&0 > $fifo1 & fi -tmux set-window-option synchronize-panes off \;\ - set-window-option remain-on-exit off \;\ +tmux \ split-window -c "$PWD" $opt "bash -c 'exec -a fzf bash $argsf'" $swap \ + $tmux_off_opts \ > /dev/null 2>&1 || { "$fzf" "${args[@]}"; exit $?; } cat $fifo2 exit "$(cat $fifo3)"