From 917b1759b08e1105ce964eff23aae8a304a12eee Mon Sep 17 00:00:00 2001
From: Junegunn Choi <junegunn.c@gmail.com>
Date: Mon, 20 Apr 2015 22:42:02 +0900
Subject: [PATCH] [fzf-tmux/vim] Fixes for fish (#204)

---
 bin/fzf-tmux   | 20 +++++++++++---------
 plugin/fzf.vim |  6 ++++++
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/bin/fzf-tmux b/bin/fzf-tmux
index c2194804..fe9f8ade 100755
--- a/bin/fzf-tmux
+++ b/bin/fzf-tmux
@@ -100,13 +100,6 @@ cleanup() {
 }
 trap cleanup EXIT SIGINT SIGTERM
 
-# Build arguments to fzf
-str=""
-for arg in "${args[@]}"; do
-  str="$str \"${arg//\"/\\\"}\""
-done
-cat <<< "$str" > $argsf
-
 fail() {
   >&2 echo "$1"
   exit 1
@@ -120,13 +113,22 @@ envs=""
 
 mkfifo $fifo2
 mkfifo $fifo3
+
+# Build arguments to fzf
+opts=""
+for arg in "${args[@]}"; do
+  opts="$opts \"${arg//\"/\\\"}\""
+done
+
 if [ -n "$term" -o -t 0 ]; then
+  cat <<< "$fzf $opts > $fifo2; echo \$? > $fifo3 $close" > $argsf
   tmux set-window-option -q synchronize-panes off \;\
-    split-window $opt "cd $(printf %q "$PWD");$envs"' bash -c "'$fzf' $(cat '$argsf') > '$fifo2'; echo \$? > '$fifo3' '"$close"'"' $swap
+    split-window $opt "cd $(printf %q "$PWD");$envs bash $argsf" $swap
 else
   mkfifo $fifo1
+  cat <<< "$fzf $opts < $fifo1 > $fifo2; echo \$? > $fifo3 $close" > $argsf
   tmux set-window-option -q synchronize-panes off \;\
-    split-window $opt "$envs"' bash -c "'$fzf' $(cat '$argsf') < '$fifo1' > '$fifo2'; echo \$? > '$fifo3' '"$close"'"' $swap
+    split-window $opt "$envs bash $argsf" $swap
   cat <&0 > $fifo1 &
 fi
 cat $fifo2
diff --git a/plugin/fzf.vim b/plugin/fzf.vim
index 8746af09..28efe690 100644
--- a/plugin/fzf.vim
+++ b/plugin/fzf.vim
@@ -105,6 +105,9 @@ function! s:upgrade(dict)
 endfunction
 
 function! fzf#run(...) abort
+try
+  let oshell = &shell
+  set shell=sh
   if has('nvim') && bufexists('[FZF]')
     echohl WarningMsg
     echomsg 'FZF is already running!'
@@ -149,6 +152,9 @@ function! fzf#run(...) abort
   finally
     call s:popd(dict)
   endtry
+finally
+  let &shell = oshell
+endtry
 endfunction
 
 function! s:present(dict, ...)
-- 
GitLab