1
0
Fork 0

fix fzf-find in non tmux

This commit is contained in:
Andrey Orst 2018-09-27 20:15:14 +03:00
parent bf7295a805
commit a2235dfe56

View file

@ -48,11 +48,6 @@ Default arguments:
" \ " \
str fzf_tag_command "readtags" str fzf_tag_command "readtags"
declare-option -docstring "path to tmp folder
Default value: ""/tmp/""
" \
str fzf_tmp "/tmp/"
# default mappings # default mappings
map global fzf -docstring "open buffer" b '<esc>: fzf-buffer<ret>' map global fzf -docstring "open buffer" b '<esc>: fzf-buffer<ret>'
map global fzf -docstring "change directory" c '<esc>: fzf-cd<ret>' map global fzf -docstring "change directory" c '<esc>: fzf-cd<ret>'
@ -71,218 +66,218 @@ Best used with mapping like:
fzf-mode %{ evaluate-commands 'enter-user-mode fzf' } fzf-mode %{ evaluate-commands 'enter-user-mode fzf' }
define-command -hidden fzf-file %{ define-command -hidden fzf-file %{
evaluate-commands %sh{ evaluate-commands %sh{
if [ -z $(command -v $kak_opt_fzf_file_command) ]; then if [ -z $(command -v $kak_opt_fzf_file_command) ]; then
echo "echo -markup '{Information}''$kak_opt_fzf_file_command'' is not installed. Falling back to ''find'''" echo "echo -markup '{Information}''$kak_opt_fzf_file_command'' is not installed. Falling back to ''find'''"
kak_opt_fzf_file_command="find" kak_opt_fzf_file_command="find"
fi fi
case $kak_opt_fzf_file_command in case $kak_opt_fzf_file_command in
find) find)
cmd="find -type f" cmd="find -type f"
;; ;;
ag) ag)
cmd="ag -l -f --hidden --one-device . " cmd="ag -l -f --hidden --one-device . "
;; ;;
rg) rg)
cmd="rg -L --hidden --files" cmd="rg -L --hidden --files"
;; ;;
find*|ag*|rg*) find*|ag*|rg*)
cmd=$kak_opt_fzf_file_command cmd=$kak_opt_fzf_file_command
;; ;;
*) *)
echo "echo -markup '{Information}$kak_opt_fzf_file_command is not supported by the script. fzf.kak may not work as you expect." echo "echo -markup '{Information}$kak_opt_fzf_file_command is not supported by the script. fzf.kak may not work as you expect."
cmd=$kak_opt_fzf_file_command cmd=$kak_opt_fzf_file_command
;; ;;
esac esac
title="fzf file" title="fzf file"
[ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings=" [ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings="
<c-s>: open file in horizontal split <c-s>: open file in horizontal split
<c-v>: open file in vertical split" <c-v>: open file in vertical split"
message="Open single or multiple files. message="Open single or multiple files.
<ret>: open file in new buffer. <ret>: open file in new buffer.
<c-w>: open file in new window $additional_keybindings" <c-w>: open file in new window $additional_keybindings"
echo "info -title '$title' '$message'" echo "info -title '$title' '$message'"
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s"
eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"'
} }
} }
define-command -hidden fzf-git %{ define-command -hidden fzf-git %{
evaluate-commands %sh{ evaluate-commands %sh{
case $kak_opt_fzf_git_command in case $kak_opt_fzf_git_command in
git) git)
cmd="git ls-tree --name-only -r HEAD" cmd="git ls-tree --name-only -r HEAD"
;; ;;
git*) git*)
cmd=$kak_opt_fzf_git_command cmd=$kak_opt_fzf_git_command
;; ;;
*) *)
echo "echo -markup '{Information}$kak_opt_fzf_git_command vcs is not supported by the script. fzf.kak may not work as you expect." echo "echo -markup '{Information}$kak_opt_fzf_git_command vcs is not supported by the script. fzf.kak may not work as you expect."
cmd=$kak_opt_fzf_git_command cmd=$kak_opt_fzf_git_command
;; ;;
esac esac
title="fzf git" title="fzf git"
[ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings=" [ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings="
<c-s>: open file in horizontal split <c-s>: open file in horizontal split
<c-v>: open file in vertical split" <c-v>: open file in vertical split"
message="Open single or multiple files from git tree. message="Open single or multiple files from git tree.
<ret>: open file in new buffer. <ret>: open file in new buffer.
<c-w>: open file in new window $additional_keybindings" <c-w>: open file in new window $additional_keybindings"
echo "info -title '$title' '$message'" echo "info -title '$title' '$message'"
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s"
eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"' eval echo 'fzf \"edit \$1\" \"$cmd\" \"-m --expect ctrl-w $additional_flags\"'
} }
} }
define-command -hidden fzf-tag %{ define-command -hidden fzf-tag %{
evaluate-commands %sh{ evaluate-commands %sh{
case $kak_opt_fzf_tag_command in case $kak_opt_fzf_tag_command in
readtags) readtags)
cmd="readtags -l | cut -f1 | sort -u" cmd="readtags -l | cut -f1 | sort -u"
;; ;;
readtags*) readtags*)
cmd=$kak_opt_fzf_tag_command cmd=$kak_opt_fzf_tag_command
;; ;;
*) *)
echo "echo -markup '{Information}$kak_opt_fzf_tag_command is not supported by the script. fzf.kak may not work as you expect." echo "echo -markup '{Information}$kak_opt_fzf_tag_command is not supported by the script. fzf.kak may not work as you expect."
cmd=$kak_opt_fzf_tag_command cmd=$kak_opt_fzf_tag_command
;; ;;
esac esac
title="fzf tag" title="fzf tag"
[ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings=" [ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings="
<c-s>: open tag in horizontal split <c-s>: open tag in horizontal split
<c-v>: open tag in vertical split" <c-v>: open tag in vertical split"
message="Jump to a symbol''s definition. message="Jump to a symbol''s definition.
<ret>: open tag in new buffer. <ret>: open tag in new buffer.
<c-w>: open tag in new window $additional_keybindings" <c-w>: open tag in new window $additional_keybindings"
echo "info -title '$title' '$message'" echo "info -title '$title' '$message'"
[ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s"
eval echo 'fzf \"ctags-search \$1\" \"$cmd\" \"--expect ctrl-w $additional_flags\"' eval echo 'fzf \"ctags-search \$1\" \"$cmd\" \"--expect ctrl-w $additional_flags\"'
} }
} }
define-command -hidden fzf-cd %{ define-command -hidden fzf-cd %{
evaluate-commands %sh{ evaluate-commands %sh{
title="fzf change directory" title="fzf change directory"
message="Change the server''s working directory" message="Change the server''s working directory"
echo "info -title '$title' '$message'" echo "info -title '$title' '$message'"
} }
fzf "change-directory $1" "(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)" fzf "change-directory $1" "(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)"
} }
define-command -hidden fzf-buffer-search %{ define-command -hidden fzf-buffer-search %{
evaluate-commands %sh{ evaluate-commands %sh{
title="fzf buffer search" title="fzf buffer search"
message="Search buffer with fzf, and jump to result location" message="Search buffer with fzf, and jump to result location"
echo "info -title '$title' '$message'" echo "info -title '$title' '$message'"
} }
fzf "execute-keys $1 gx" "nl -b a -n ln %val{buffile}" "--reverse | awk '{print $1}'" fzf "execute-keys $1 gx" "(nl -b a -n ln %val{buffile}" "--reverse | cut -f 1)"
} }
define-command -hidden fzf -params 2..3 %{ evaluate-commands %sh{ define-command -hidden fzf -params 2..3 %{ evaluate-commands %sh{
callback=$1 callback=$1
items_command=$2 items_command=$2
additional_flags=$3 additional_flags=$3
# 'tr' - if '(cmd1 && cmd2) | fzf' was passed 'awk' will return '(cmd1' # 'tr' - if '(cmd1 && cmd2) | fzf' was passed 'awk' will return '(cmd1'
items_executable=$(echo $items_command | awk '{print $1}' | tr '(' ' ' | cut -d " " -f 2) items_executable=$(echo $items_command | awk '{print $1}' | tr '(' ' ' | cut -d " " -f 2)
if [ -z $(command -v $items_executable) ]; then if [ -z $(command -v $items_executable) ]; then
echo "fail \'$items_executable' executable not found" echo "fail \'$items_executable' executable not found"
exit exit
fi fi
tmp=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-fzf.XXXXXX)) tmp=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-fzf.XXXXXX))
exec=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-exec.XXXXXX)) exec=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-exec.XXXXXX))
if [ ! -z "${kak_client_env_TMUX}" ]; then if [ ! -z "${kak_client_env_TMUX}" ]; then
cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-q $additional_flags > $tmp" cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-q $additional_flags > $tmp"
elif [ ! -z "${kak_opt_termcmd}" ]; then elif [ ! -z "${kak_opt_termcmd}" ]; then
path=$(pwd) path=$(pwd)
cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp'\"" cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 --expect ctrl-q $additional_flags > $tmp'\""
else else
echo "fail termcmd option is not set" echo "fail termcmd option is not set"
fi exit
echo $cmd > ~/cmd fi
echo $cmd > ~/cmd
( (
eval "$cmd" eval "$cmd"
if [ -s $tmp ]; then if [ -s $tmp ]; then
( (
read action read action
if [ "${callback% *}" != "change-directory" ]; then if [ "${callback% *}" != "change-directory" ]; then
case $action in case $action in
"ctrl-w") "ctrl-w")
wincmd="x11-new " wincmd="x11-new "
[ ! -z "${kak_client_env_TMUX}" ] && wincmd="tmux-new-window " ;; [ ! -z "${kak_client_env_TMUX}" ] && wincmd="tmux-new-window " ;;
"ctrl-s") "ctrl-s")
wincmd="tmux-new-vertical " ;; wincmd="tmux-new-vertical " ;;
"ctrl-v") "ctrl-v")
wincmd="tmux-new-horizontal " ;; wincmd="tmux-new-horizontal " ;;
*) *)
wincmd= ;; wincmd= ;;
esac esac
callback="$wincmd$callback" callback="$wincmd$callback"
echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec
else else
echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec
echo "echo eval -client $kak_client \"fzf-cd\" | kak -p $kak_session" >> $exec echo "echo eval -client $kak_client \"fzf-cd\" | kak -p $kak_session" >> $exec
fi fi
chmod 755 $exec chmod 755 $exec
while read file; do while read file; do
$exec $file $exec $file
done done
) < $tmp ) < $tmp
fi fi
rm $tmp rm $tmp
rm $exec rm $exec
) > /dev/null 2>&1 < /dev/null & ) > /dev/null 2>&1 < /dev/null &
}} }}
define-command -hidden fzf-buffer %{ evaluate-commands %sh{ define-command -hidden fzf-buffer %{ evaluate-commands %sh{
tmp=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-fzf.XXXXXX)) tmp=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-fzf.XXXXXX))
setbuf=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-setbuf.XXXXXX)) setbuf=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-setbuf.XXXXXX))
delbuf=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-delbuf.XXXXXX)) delbuf=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-delbuf.XXXXXX))
buffers=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-buffers.XXXXXX)) buffers=$(mktemp $(eval echo ${TMPDIR:-/tmp}/kak-buffers.XXXXXX))
items_command="echo $kak_buflist | tr ' ' '\n' | sort" items_command="echo $kak_buflist | tr ' ' '\n' | sort"
if [ ! -z "${kak_client_env_TMUX}" ]; then if [ ! -z "${kak_client_env_TMUX}" ]; then
cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-d > $tmp" cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-d > $tmp"
elif [ ! -z "${kak_opt_termcmd}" ]; then elif [ ! -z "${kak_opt_termcmd}" ]; then
path=$(pwd) path=$(pwd)
eval "echo $kak_buflist | tr ' ' '\n' | sort > $buffers" eval "echo $kak_buflist | tr ' ' '\n' | sort > $buffers"
cmd="$kak_opt_termcmd \"sh -c 'cat $buffers | fzf --color=16 --expect ctrl-d > $tmp'\"" cmd="$kak_opt_termcmd \"sh -c 'cat $buffers | fzf --color=16 --expect ctrl-d > $tmp'\""
else else
echo "fail termcmd option is not set" echo "fail termcmd option is not set"
fi fi
echo "info -title 'fzf buffer' 'Set buffer to edit in current client echo "info -title 'fzf buffer' 'Set buffer to edit in current client
<c-d>: delete selected buffer'" <c-d>: delete selected buffer'"
echo "echo eval -client $kak_client \"buffer \$1\" | kak -p $kak_session" > $setbuf echo "echo eval -client $kak_client \"buffer \$1\" | kak -p $kak_session" > $setbuf
echo "echo eval -client $kak_client \"delete-buffer \$1\" | kak -p $kak_session" > $delbuf echo "echo eval -client $kak_client \"delete-buffer \$1\" | kak -p $kak_session" > $delbuf
echo "echo eval -client $kak_client \"fzf-buffer \" | kak -p $kak_session" >> $delbuf echo "echo eval -client $kak_client \"fzf-buffer \" | kak -p $kak_session" >> $delbuf
chmod 755 $setbuf chmod 755 $setbuf
chmod 755 $delbuf chmod 755 $delbuf
( (
eval "$cmd" eval "$cmd"
if [ -s $tmp ]; then if [ -s $tmp ]; then
( (
read action read action
read buf read buf
if [ "$action" = "ctrl-d" ]; then if [ "$action" = "ctrl-d" ]; then
$setbuf $kak_bufname $setbuf $kak_bufname
$delbuf $buf $delbuf $buf
else else
$setbuf $buf $setbuf $buf
fi fi
) < $tmp ) < $tmp
else else
$setbuf $kak_bufname $setbuf $kak_bufname
fi fi
rm $tmp rm $tmp
rm $setbuf rm $setbuf
rm $delbuf rm $delbuf
rm $buffers rm $buffers
) > /dev/null 2>&1 < /dev/null & ) > /dev/null 2>&1 < /dev/null &
}} }}