From b72684bffd55bef4b5031d17fd6d8b49c039984c Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Tue, 25 Sep 2018 13:57:03 +0300 Subject: [PATCH 1/2] add ability to open files, tags in new window and splits. Add ability to open several files at once --- rc/fzf.kak | 63 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 17 deletions(-) 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 From f7ca32e24df9e060f9dac24f40cc888e934fb1b8 Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Tue, 25 Sep 2018 15:53:00 +0300 Subject: [PATCH 2/2] add info boxes --- rc/fzf.kak | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index d9160d4..3c5d90d 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -140,6 +140,39 @@ define-command -hidden fzf -params 2 %{ evaluate-commands %sh{ callback=$1 items_command=$2 + 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 @@ -151,12 +184,10 @@ define-command -hidden fzf -params 2 %{ evaluate-commands %sh{ 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'" + 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'\"" - [ "${callback% *}" != "cd" ] && echo "echo -markup '{Information}: new window'" else echo "fail termcmd option is not set" fi @@ -209,7 +240,8 @@ define-command -hidden fzf-buffer %{ evaluate-commands %sh{ echo "fail termcmd option is not set" fi - echo "echo -markup '{Information}: delete selected buffer'" + 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