1
0
Fork 0

use new command in fzf-file

This commit is contained in:
Andrey Orst 2019-03-26 15:14:30 +03:00
parent 266f9a8e71
commit 21e1361c18
2 changed files with 12 additions and 120 deletions

View file

@ -57,6 +57,6 @@ define-command -hidden fzf-file %{ evaluate-commands %sh{
printf "%s\n" "info -title 'fzf file' '$message$tmux_keybindings'" printf "%s\n" "info -title 'fzf file' '$message$tmux_keybindings'"
[ ! -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"
printf "%s\n" "fzf %{edit -existing} %{$cmd} %{-m --expect ctrl-w $additional_flags}" printf "%s\n" "fzf -preview -kak-cmd %{edit -existing} -items-cmd %{$cmd} -fzf-args %{-m --expect ctrl-w $additional_flags}"
}} }}

View file

@ -101,121 +101,6 @@ define-command -hidden fzf-window -params .. %{
} }
} }
define-command -hidden -docstring \
"fzf <command> <items command> [<fzf args> <extra commands>]: generic fzf command.
This command can be used to create new fzf wrappers for various Kakoune or external
features. More about arguments:
<command>:
The <command> is a Kakoune command that should be used after fzf returns some result.
For example to open file chooser we can call fzf with `edit` as a command:
'fzf %{edit} %{<items command>}'
After choosing one or more files in fzf, <command> will be used with each of them.
<items command>
This is the shell command that is used to provide list of values to fzf. It can be
any command that provides newline separated list of items, which is then piped to fzf.
<fzf args>
These are additional flags for fzf program, that are passed to it. You can check them
in fzf manual.
<extra commands>
This is extra commands that are preformed after fzf finishes and main command was
executed. This can be used to invoke fzf back, like in fzf-cd command, or to execute
any other Kakoune command that is meaningfull in current situation. This is more is
a workaround of problem with executing composite commands, where fzf result should
be in the middle of the command and may be changed or removed it further versions.
If you want to develop a module with fzf command, feel free to check for existing
module implementations in 'rc/fzf-modules' directory." \
fzf -params 2..4 %{ evaluate-commands %sh{
command=$1
items_command=$2
additional_flags=$3
extra_action=$4
tmux_height=$kak_opt_fzf_tmux_height
items_executable=$(printf "%s\n" "$items_command" | grep -o -E "[[:alpha:]]+" | head -1)
if [ -z "$(command -v $items_executable)" ]; then
printf "%s\n" "fail %{'$items_executable' executable not found}"
exit
fi
if [ -z "${command##edit*}" ] && [ $kak_opt_fzf_preview = "true" ]; then
case $kak_opt_fzf_highlight_cmd in
bat)
highlighter="bat --color=always --style=plain {}" ;;
coderay)
highlighter="coderay {}" ;;
highlight)
highlighter="highlight --failsafe -O ansi {}" ;;
rouge)
highlighter="rougify {}" ;;
bat*|coderay*|highlight*|rougify*)
highlighter=$kak_opt_fzf_highlight_cmd ;;
*)
executable=$(printf "%s\n" "$kak_opt_fzf_highlight_cmd" | grep -o -E '[[:alpha:]]+' | head -1)
printf "%s\n" "echo -markup %{{Information}'$executable' highlighter is not supported by the script. fzf.kak may not work as you expect.}"
highlighter=$kak_opt_fzf_highlight_cmd ;;
esac
tmux_height=$kak_opt_fzf_file_preview_tmux_height
additional_flags="--preview '($highlighter || cat {}) 2>/dev/null | head -n $kak_opt_fzf_preview_lines' --preview-window=\$pos $additional_flags"
fi
if [ -n "$kak_client_env_TMUX" ]; then
preview_pos="pos=right:$kak_opt_fzf_preview_width;"
else
preview_pos="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:$kak_opt_fzf_preview_width || pos=top:$kak_opt_fzf_preview_height;"
fi
tmp=$(mktemp ${TMPDIR:-/tmp}/kak-fzf-tmp.XXXXXX)
fzfcmd=$(mktemp ${TMPDIR:-/tmp}/kak-fzfcmd.XXXXXX)
printf "%s\n" "cd \"$PWD\" && $preview_pos $items_command | SHELL=$(command -v sh) $kak_opt_fzf_implementation $additional_flags > $tmp; rm $fzfcmd" > $fzfcmd
chmod 755 $fzfcmd
if [ -n "$kak_client_env_TMUX" ]; then
[ -n "${tmux_height%%*%}" ] && measure="-l" || measure="-p"
cmd="nop %sh{ command tmux split-window $measure ${tmux_height%%%*} 'sh -c $fzfcmd' }"
else
cmd="terminal %{$fzfcmd}"
fi
(
printf "%s\n" "${cmd}" | kak -p ${kak_session}
while [ -e $fzfcmd ]; do
sleep 0.1
done
if [ -s $tmp ]; then
(
read action
case $action in
ctrl-w)
wincmd="fzf-window" ;;
ctrl-s)
wincmd="fzf-vertical" ;;
ctrl-v)
wincmd="fzf-horizontal" ;;
*)
if [ -n "$action" ]; then
printf "%s\n" "evaluate-commands -client $kak_client '$command' '$action'" | kak -p $kak_session
[ -n "$extra_action" ] && printf "%s\n" "evaluate-commands -client $kak_client $extra_action" | kak -p $kak_session
fi ;;
esac
kakoune_command() {
printf "%s\n" "evaluate-commands -client $kak_client $wincmd %{$command %{$1}}"
[ -n "$extra_action" ] && printf "%s\n" "evaluate-commands -client $kak_client $extra_action"
}
while read item; do
kakoune_command "$item" | kak -p $kak_session
done
) < $tmp
fi
rm $tmp
) > /dev/null 2>&1 < /dev/null &
}}
define-command -docstring \ define-command -docstring \
"fzf <switches>: generic fzf command. This command can be used to create new fzf wrappers for various Kakoune or external features. "fzf <switches>: generic fzf command. This command can be used to create new fzf wrappers for various Kakoune or external features.
@ -225,11 +110,10 @@ Switches:
-fzf-args <args>: Additional flags for fzf program -fzf-args <args>: Additional flags for fzf program
-post-action <commands>: Extra commands that are preformed after `-kak-cmd' command. -post-action <commands>: Extra commands that are preformed after `-kak-cmd' command.
-preview: should fzf window include preview" \ -preview: should fzf window include preview" \
new-fzf -shell-script-candidates %{echo "-kak-cmd\n-items-cmd\n-fzf-args\n-post-action\n"} -params .. %{ evaluate-commands %sh{ fzf -shell-script-candidates %{echo "-kak-cmd\n-items-cmd\n-fzf-args\n-post-action\n"} -params .. %{ evaluate-commands %sh{
tmux_height=$kak_opt_fzf_tmux_height
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case $1 in case $1 in
-kak-cmd) shift; kakoune_cmd="${kakoune_cmd} $1" ;; -kak-cmd) shift; kakoune_cmd="$1" ;;
-items-cmd) shift; items_cmd="${items_cmd} $1" ;; -items-cmd) shift; items_cmd="${items_cmd} $1" ;;
-fzf-args) shift; fzf_args="${fzf_args} $1" ;; -fzf-args) shift; fzf_args="${fzf_args} $1" ;;
-post-action) shift; post_action="${post_action} $1" ;; -post-action) shift; post_action="${post_action} $1" ;;
@ -239,6 +123,13 @@ new-fzf -shell-script-candidates %{echo "-kak-cmd\n-items-cmd\n-fzf-args\n-post-
shift shift
done done
printf "echo -debug %%{kakoune_cmd: %s}\n" "'$kakoune_cmd'"
printf "echo -debug %%{items_cmd: %s}\n" "'$items_cmd'"
printf "echo -debug %%{fzf_args: %s}\n" "'$fzf_args'"
printf "echo -debug %%{post_action: %s}\n" "'$post_action'"
printf "echo -debug %%{preview: %s}\n" "'$preview'"
printf "echo -debug %%{ignored: %s}\n" "'$ignored'"
if [ "$preview" = "true" ] && [ ${kak_opt_fzf_preview} = "true" ]; then if [ "$preview" = "true" ] && [ ${kak_opt_fzf_preview} = "true" ]; then
case ${kak_opt_fzf_highlight_cmd} in case ${kak_opt_fzf_highlight_cmd} in
bat) highlight_cmd="bat --color=always --style=plain {}" ;; bat) highlight_cmd="bat --color=always --style=plain {}" ;;
@ -248,7 +139,7 @@ new-fzf -shell-script-candidates %{echo "-kak-cmd\n-items-cmd\n-fzf-args\n-post-
*) highlight_cmd="${kak_opt_fzf_highlight_cmd}" ;; *) highlight_cmd="${kak_opt_fzf_highlight_cmd}" ;;
esac esac
if [ -n "${kak_client_env_TMUX}" ]; then if [ -n "${kak_client_env_TMUX}" ]; then
[ -z "${kakoune_cmd##edit*}" ] && tmux_height=$kak_opt_fzf_file_preview_tmux_height [ -z "${kakoune_cmd##edit*}" ] && tmux_height="$kak_opt_fzf_file_preview_tmux_height"
preview_position="pos=right:${kak_opt_fzf_preview_width};" preview_position="pos=right:${kak_opt_fzf_preview_width};"
else else
preview_position="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:${kak_opt_fzf_preview_width} || pos=top:${kak_opt_fzf_preview_height};" preview_position="sleep 0.1; [ \$(tput cols) -gt \$(expr \$(tput lines) \* 2) ] && pos=right:${kak_opt_fzf_preview_width} || pos=top:${kak_opt_fzf_preview_height};"
@ -263,6 +154,7 @@ new-fzf -shell-script-candidates %{echo "-kak-cmd\n-items-cmd\n-fzf-args\n-post-
chmod 755 ${fzfcmd} chmod 755 ${fzfcmd}
if [ -n "${kak_client_env_TMUX}" ]; then if [ -n "${kak_client_env_TMUX}" ]; then
[ -z "$tmux_height" ] && tmux_height=$kak_opt_fzf_tmux_height
[ -n "${tmux_height%%*%}" ] && measure="-l" || measure="-p" [ -n "${tmux_height%%*%}" ] && measure="-l" || measure="-p"
cmd="nop %sh{ command tmux split-window ${measure} ${tmux_height%%%*} 'sh -c ${fzfcmd}' }" cmd="nop %sh{ command tmux split-window ${measure} ${tmux_height%%%*} 'sh -c ${fzfcmd}' }"
else else