diff --git a/rc/fzf.kak b/rc/fzf.kak index 13b2b0e..19c203e 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -153,8 +153,7 @@ define-command -hidden 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. + 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" @@ -176,8 +175,16 @@ define-command -hidden fzf-buffer-search %{ title="fzf buffer search" message="Search buffer with fzf, and jump to result location" echo "info -title '$title' '$message'" + line=$kak_cursor_line + char=$(expr $kak_cursor_char_column - 1) + buffer_content=$(mktemp ${TMPDIR:-/tmp}/kak-curr-buff.XXXXXX) + echo "execute-keys %{%cat>$buffer_content;}" + echo "execute-keys $line g $char l" + echo "fzf \"execute-keys \$1 gx\" \"(nl -b a -n ln $buffer_content\" \"--reverse | cut -f 1)\"" + (echo "fzf \"execute-keys \$1 gx\" \"(nl -b a -n ln $buffer_content\" \"--reverse | cut -f 1)\"") 1>&2 + # sleep 2 is needed to because everything is done asynchronously, so file should not be deleted until it was read by fzf + echo "nop %sh{sleep 2; rm $buffer_content}" } - 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{