diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2015-04-18 16:24:57 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-04-18 16:24:57 +0900 |
commit | d2f95d69fbf40d77b9b61b7e24989d607e3790a9 (patch) | |
tree | 7a9abdb71c30318e60548277095044e8ee2829c7 /bin | |
parent | 1169cc86538e6a7659b64ac5a52c1fb7d37b759d (diff) |
[fzf-tmux] Fix #200 - Double-quote handling
Related #199
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/fzf-tmux | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/bin/fzf-tmux b/bin/fzf-tmux index 55ea5f76..fb00edbe 100755 --- a/bin/fzf-tmux +++ b/bin/fzf-tmux @@ -89,19 +89,27 @@ fi set -e -# Build arguments to fzf -[ ${#args[@]} -gt 0 ] && fzf_args=$(printf '\\"%s\\" ' "${args[@]}"; echo '') - # Clean up named pipes on exit id=$RANDOM +argsf=/tmp/fzf-args-$id fifo1=/tmp/fzf-fifo1-$id fifo2=/tmp/fzf-fifo2-$id fifo3=/tmp/fzf-fifo3-$id cleanup() { - rm -f $fifo1 $fifo2 $fifo3 + rm -f $argsf $fifo1 $fifo2 $fifo3 } trap cleanup EXIT SIGINT SIGTERM +# Build arguments to fzf +touch $argsf +if [ ${#args[@]} -gt 0 ]; then + str="" + for arg in "${args[@]}"; do + str="$str \"${arg//\"/\\\"}\"" + done + cat <<< "$str" > $argsf +fi + fail() { >&2 echo "$1" exit 1 @@ -117,11 +125,11 @@ mkfifo $fifo2 mkfifo $fifo3 if [ -n "$term" -o -t 0 ]; then tmux set-window-option -q synchronize-panes off \;\ - split-window $opt "cd $(printf %q "$PWD");$envs"' sh -c "'$fzf' '"$fzf_args"' > '$fifo2'; echo \$? > '$fifo3' '"$close"'"' $swap + split-window $opt "cd $(printf %q "$PWD");$envs"' sh -c "'$fzf' $(cat '$argsf') > '$fifo2'; echo \$? > '$fifo3' '"$close"'"' $swap else mkfifo $fifo1 tmux set-window-option -q synchronize-panes off \;\ - split-window $opt "$envs"' sh -c "'$fzf' '"$fzf_args"' < '$fifo1' > '$fifo2'; echo \$? > '$fifo3' '"$close"'"' $swap + split-window $opt "$envs"' sh -c "'$fzf' $(cat '$argsf') < '$fifo1' > '$fifo2'; echo \$? > '$fifo3' '"$close"'"' $swap cat <&0 > $fifo1 & fi cat $fifo2 |