diff --git a/rc/fzf.kak b/rc/fzf.kak index 1325c63..3c5d90d 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -133,35 +133,91 @@ define-command -hidden fzf-tag %{ } } define-command -hidden fzf-cd %{ - fzf "change-directory $1" "(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)" + fzf "cd $1" "(echo .. && find \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type d -print)" } define-command -hidden fzf -params 2 %{ evaluate-commands %sh{ callback=$1 items_command=$2 - tmp=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-fzf.XXXXXX)) - exec=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-exec.XXXXXX)) - if [ ! -z "${kak_client_env_TMUX}" ]; then - cmd="$items_command | fzf-tmux -d 15 --color=16 > $tmp" - elif [ ! -z "${kak_opt_termcmd}" ]; then - path=$(pwd) - cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 > $tmp'\"" - else - echo "fail termcmd option is not set" - fi + + case $callback in + cd*) + title="fzf change directory" + message="Change the server''s working directory" + additional_flags= + ;; + ctags-search*) + title="fzf tag" + [ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings=" +: open tag in horizontal split +: open tag in vertical split" + message="Jump to a symbol''s definition. +: open tag in new buffer. +: open tag in new window $additional_keybindings" + additional_flags="--expect ctrl-v --expect ctrl-s" + ;; + edit*) + title="fzf edit" + [ ! -z "${kak_client_env_TMUX}" ] && additional_keybindings=" +: open file in horizontal split +: open file in vertical split" + message="Open single or multiple files. +: open file in new buffer. +: open file in new window $additional_keybindings" + additional_flags="-m --expect ctrl-v --expect ctrl-s" + ;; + *) + title="fzf unknown command" + message="This command is not known by fzf.kak plugin. You can send a PR with it to https://github.com/andreyorst/fzf.kak" + ;; + esac + + echo "info -title '$title' '$message'" # 'tr' - if '(cmd1 && cmd2) | fzf' was passed 'awk' will return '(cmd1' items_executable=$(echo $items_command | awk '{print $1}' | tr '(' ' ') if [ -z $(command -v $items_executable) ]; then echo "fail \'$items_executable' executable not found" exit fi - echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec - chmod 755 $exec + + tmp=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-fzf.XXXXXX)) + exec=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-exec.XXXXXX)) + + if [ ! -z "${kak_client_env_TMUX}" ]; then + cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-w $additional_flags> $tmp" + elif [ ! -z "${kak_opt_termcmd}" ]; then + path=$(pwd) + cmd="$kak_opt_termcmd \"sh -c 'cd $path && $items_command | fzf --color=16 -m --expect ctrl-w > $tmp'\"" + else + echo "fail termcmd option is not set" + fi + ( eval "$cmd" - (while read file; do - $exec $file - done) < $tmp + if [ -s $tmp ]; then + ( + read action + if [ "${callback% *}" != "cd" ]; then + case $action in + "ctrl-w") + wincmd="x11-new" + [ ! -z "${kak_client_env_TMUX}" ] && wincmd="tmux-new-window" ;; + "ctrl-s") + wincmd="tmux-new-vertical" ;; + "ctrl-v") + wincmd="tmux-new-horizontal" ;; + *) + wincmd= ;; + esac + callback="$wincmd $callback" + fi + echo "echo eval -client $kak_client \"$callback\" | kak -p $kak_session" > $exec + chmod 755 $exec + while read file; do + $exec $file + done + ) < $tmp + fi rm $tmp rm $exec ) > /dev/null 2>&1 < /dev/null & @@ -173,6 +229,7 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{ delbuf=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-delbuf.XXXXXX)) buffers=$(mktemp $(eval echo $kak_opt_fzf_tmp/kak-buffers.XXXXXX)) items_command="echo $kak_buflist | tr ' ' '\n' | sort" + if [ ! -z "${kak_client_env_TMUX}" ]; then cmd="$items_command | fzf-tmux -d 15 --color=16 --expect ctrl-d > $tmp" elif [ ! -z "${kak_opt_termcmd}" ]; then @@ -182,6 +239,10 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{ else echo "fail termcmd option is not set" fi + + echo "info -title 'fzf buffer' 'Set buffer to edit in current client +: delete selected buffer'" + 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 \"fzf-buffer \" | kak -p $kak_session" >> $delbuf @@ -192,7 +253,7 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{ if [ -s $tmp ]; then ( read action read buf - if [ "$action" == "ctrl-d" ]; then + if [ "$action" = "ctrl-d" ]; then $setbuf $kak_bufname $delbuf $buf else