From 77f3eddac622c4a48eb950b082645bae8e59e56c Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Sat, 30 Mar 2019 16:53:38 +0300 Subject: [PATCH] populate grep buffer --- rc/fzf.kak | 25 +++++++++++++++++-------- rc/modules/sk-grep.kak | 20 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/rc/fzf.kak b/rc/fzf.kak index 1afc576..cbd1f1a 100644 --- a/rc/fzf.kak +++ b/rc/fzf.kak @@ -103,6 +103,7 @@ define-command -docstring \ Switches: -kak-cmd : A Kakoune cmd that is applied to fzf resulting value + -multiple-cmd : A Kakoune cmd that is applied all multiple selected files but the first one -items-cmd : A command that is used as a pipe to provide list of values to fzf -fzf-impl : Owerride fzf implementation variable -fzf-args : Additional flags for fzf program @@ -112,6 +113,7 @@ Switches: -post-action : Extra commands that are preformed after `-kak-cmd' command" \ -shell-script-completion %{ printf "%s\n" "-kak-cmd +-multiple-cmd -items-cmd -fzf-impl -fzf-args @@ -125,17 +127,20 @@ fzf -params .. %{ evaluate-commands %sh{ while [ $# -gt 0 ]; do case $1 in - -kak-cmd) shift; kakoune_cmd="$1" ;; - -items-cmd) shift; items_cmd="$1 |" ;; - -fzf-impl) shift; fzf_impl="$1" ;; - -fzf-args) shift; fzf_args="$1" ;; - -preview-cmd) shift; preview_cmd="$1" ;; - -preview) preview="true" ;; - -filter) shift; filter="| $1" ;; - -post-action) shift; post_action="$1" ;; + -kak-cmd) shift; kakoune_cmd="$1" ;; + -multiple-cmd) shift; multiple_cmd="$1" ;; + -items-cmd) shift; items_cmd="$1 |" ;; + -fzf-impl) shift; fzf_impl="$1" ;; + -fzf-args) shift; fzf_args="$1" ;; + -preview-cmd) shift; preview_cmd="$1" ;; + -preview) preview="true" ;; + -filter) shift; filter="| $1" ;; + -post-action) shift; post_action="$1" ;; esac; shift done + [ -z "$multiple_cmd" ] && multiple_cmd="$kakoune_cmd" + if [ "${preview}" = "true" ]; then # bake position option to define them at runtime if [ -n "${kak_client_env_TMUX}" ]; then @@ -196,8 +201,12 @@ fzf -params .. %{ evaluate-commands %sh{ esac if [ -n "${item}" ]; then printf "%s\n" "evaluate-commands -client ${kak_client} ${wincmd} %{${kakoune_cmd} %{${item}}}" + break fi done + while read line; do + printf "%s\n" "evaluate-commands -client ${kak_client} ${wincmd} %{${multiple_cmd} %{${line}}}" + done if [ -n "${post_action}" ]; then printf "%s\n" "evaluate-commands -client ${kak_client} %{${post_action}}" fi diff --git a/rc/modules/sk-grep.kak b/rc/modules/sk-grep.kak index aa10027..8285a41 100644 --- a/rc/modules/sk-grep.kak +++ b/rc/modules/sk-grep.kak @@ -15,6 +15,8 @@ Default value: grep -RHn" \ str fzf_sk_grep_command 'grep -RHn' +declare-option -hidden str fzf_sk_first_file '' + try %{ declare-user-mode fzf } evaluate-commands %sh{ @@ -38,14 +40,28 @@ define-command -hidden fzf-sk-grep %{ evaluate-commands %sh{ printf "%s\n" "info -title '${title}' '${message}${tmux_keybindings}'" [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect ctrl-v --expect ctrl-s" - printf "%s\n" "fzf -kak-cmd %{fzf-sk-grep-handler} -fzf-impl %{sk -i -c '$kak_opt_fzf_sk_grep_command {}'} -fzf-args %{--expect ctrl-w $additional_flags}" + printf "%s\n" "fzf -kak-cmd %{fzf-sk-grep-handler} -fzf-impl %{sk -m -i -c '$kak_opt_fzf_sk_grep_command {}'} -fzf-args %{--expect ctrl-w $additional_flags} -multiple-cmd %{fzf-sk-populate-grep} -post-action %{buffer %opt{fzf_sk_first_file}}" }} define-command -hidden fzf-sk-grep-handler -params 1 %{ evaluate-commands %sh{ printf "%s\n" "$1" | awk '{ file = $0; sub(/:.*/, "", file); gsub("&", "&&", file); line = $0; sub(/[^:]+:/, "", line); sub(/:.*/, "", line) - print "edit -existing %&" file "&; execute-keys %&" line "gxvc&"; + print "edit -existing %&" file "&; execute-keys %&" line "gxvc&" + print "set-option global fzf_sk_first_file %&" file "&" }' }} +define-command -hidden fzf-sk-populate-grep -params 1 %{ + try %{ + buffer *grep* + } catch %{ + edit -scratch *grep* + set-option buffer filetype grep + } + evaluate-commands -buffer *grep* %{ + set-register dquote %arg{1} + execute-keys gjPo + } +} +