diff --git a/rc/fzf.kak b/rc/fzf.kak index 1325c63..d9160d4 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -133,35 +133,60 @@ 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 + # '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 -m --expect ctrl-w --expect ctrl-v --expect ctrl-s > $tmp" + [ "${callback% *}" != "cd" ] && echo "echo -markup '{Information}: new window, : vertical split, : horizontal split'" + 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'\"" + [ "${callback% *}" != "cd" ] && echo "echo -markup '{Information}: new window'" + 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 +198,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 +208,9 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{ else echo "fail termcmd option is not set" fi + + echo "echo -markup '{Information}: 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 +221,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