summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2015-04-18 16:24:57 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2015-04-18 16:24:57 +0900
commitd2f95d69fbf40d77b9b61b7e24989d607e3790a9 (patch)
tree7a9abdb71c30318e60548277095044e8ee2829c7 /bin
parent1169cc86538e6a7659b64ac5a52c1fb7d37b759d (diff)
[fzf-tmux] Fix #200 - Double-quote handling
Related #199
Diffstat (limited to 'bin')
-rwxr-xr-xbin/fzf-tmux20
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