From b48b4e34a4263eef1ee7780f819fb650cae4702d Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Wed, 13 Nov 2019 14:58:55 +0300 Subject: [PATCH] add grep command inspired by https://discuss.kakoune.com/t/how-to-search-for-text-in-all-files-in-a-directory/785 --- rc/modules/fzf-grep.kak | 51 +++++++++++++++++++++++++++++++++++++++++ rc/modules/sk-grep.kak | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 rc/modules/fzf-grep.kak diff --git a/rc/modules/fzf-grep.kak b/rc/modules/fzf-grep.kak new file mode 100644 index 0000000..e6ac9b9 --- /dev/null +++ b/rc/modules/fzf-grep.kak @@ -0,0 +1,51 @@ +# ╭─────────────╥────────────────────────╮ +# │ Author: ║ File: │ +# │ Andrey Orst ║ sk-grep.kak │ +# ╞═════════════╩════════════════════════╡ +# │ Module running interactive grep with │ +# │ ski for fzf.kak │ +# ╞══════════════════════════════════════╡ +# │ GitHub.com/andreyorst/fzf.kak │ +# ╰──────────────────────────────────────╯ + +hook global ModuleLoaded fzf %§ + +declare-option -docstring "what command to use to provide list of grep search matches. +Grep output must follow the format of 'filename:line-number:text' + +Default value: + grep -RHn" \ +str fzf_grep_command 'grep' + +map -docstring 'grep file contents recursively' global fzf g ': fzf-grep' + +define-command -hidden fzf-grep %{ evaluate-commands %sh{ + if [ -z "$(command -v $kak_opt_fzf_grep_command)" ]; then + printf "%s\n" "echo -markup '{Information}''$kak_opt_fzf_grep_command'' is not installed. Falling back to ''grep'''" + kak_opt_fzf_grep_command="grep" + fi + case $kak_opt_fzf_grep_command in + (grep) cmd="grep -RHn '' ." ;; + (rg) cmd="rg --line-number --no-column --no-heading --color=never ''" ;; + (grep*|rg*) cmd=$kak_opt_fzf_grep_command ;; + (*) items_executable=$(printf "%s\n" "$kak_opt_fzf_grep_command" | grep -o -E "[[:alpha:]]+" | head -1) + printf "%s\n" "echo -markup %{{Information}Warning: '$executable' is not supported by fzf.kak.}" + cmd=$kak_opt_fzf_grep_command ;; + esac + + cmd="$cmd 2>/dev/null" + + title="fzf grep" + message="grep through contents of all files recursively. +: open search result in new buffer. +$kak_opt_fzf_window_map: open search result in new terminal" + [ ! -z "${kak_client_env_TMUX}" ] && tmux_keybindings=" +$kak_opt_fzf_horizontal_map: open search result in horizontal split +$kak_opt_fzf_vertical_map: open search result in vertical split" + + printf "%s\n" "info -title '${title}' '${message}${tmux_keybindings}'" + [ ! -z "${kak_client_env_TMUX}" ] && additional_flags="--expect $kak_opt_fzf_vertical_map --expect $kak_opt_fzf_horizontal_map" + printf "%s\n" "fzf -kak-cmd %{evaluate-commands} -fzf-args %{--expect $kak_opt_fzf_window_map $additional_flags} -items-cmd %{$cmd} -filter %{sed -E 's/([^:]+):([^:]+):.*/edit -existing \1; execute-keys \2gvc/'}" +}} + +§ diff --git a/rc/modules/sk-grep.kak b/rc/modules/sk-grep.kak index d0e9002..07b8bd0 100644 --- a/rc/modules/sk-grep.kak +++ b/rc/modules/sk-grep.kak @@ -21,7 +21,7 @@ declare-option -hidden str fzf_sk_first_file '' evaluate-commands %sh{ if [ -n "$(command -v sk)" ]; then - printf "%s\n" "map global fzf -docstring %{Interactive grep with skim} 'g' ': fzf-sk-grep'" + printf "%s\n" "map global fzf -docstring %{Interactive grep with skim} '' ': fzf-sk-grep'" fi }