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