1
0
Fork 0
fzf.kak/rc/modules/sk-grep.kak

72 lines
3 KiB
Plaintext
Raw Normal View History

2019-03-02 19:15:33 +00:00
# ╭─────────────╥────────────────────────╮
# │ Author: ║ File: │
# │ Andrey Orst ║ sk-grep.kak │
# ╞═════════════╩════════════════════════╡
# │ Module running interactive grep with │
# │ ski for fzf.kak │
# ╞══════════════════════════════════════╡
# │ GitHub.com/andreyorst/fzf.kak │
# ╰──────────────────────────────────────╯
2019-03-03 18:31:23 +00:00
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'
2019-03-03 18:31:23 +00:00
Default value:
grep -RHn" \
str fzf_sk_grep_command 'grep -RHn'
2019-03-02 19:15:33 +00:00
2019-03-30 13:53:38 +00:00
declare-option -hidden str fzf_sk_first_file ''
hook global ModuleLoaded fzf %§
2019-03-26 17:34:01 +00:00
2019-03-02 19:15:33 +00:00
evaluate-commands %sh{
if [ -n "$(command -v sk)" ]; then
2019-03-27 06:53:38 +00:00
printf "%s\n" "map global fzf -docstring %{Interactive grep with skim} 'g' '<esc>: fzf-sk-grep<ret>'"
2019-03-02 19:15:33 +00:00
fi
}
2019-03-27 06:53:38 +00:00
define-command -hidden fzf-sk-grep %{ evaluate-commands %sh{
2019-03-02 19:15:33 +00:00
if [ -z "$(command -v sk)" ]; then
printf "%s\n" "echo -markup %{{Information}skim required to run this command}"
exit
fi
title="skim interactive grep"
2019-03-03 18:31:23 +00:00
message="Interactively grep pattern from current directory
<ret>: open search result in new buffer.
2019-05-13 18:34:46 +00:00
$kak_opt_fzf_window_map: open search result in new terminal"
2019-03-03 18:31:23 +00:00
[ ! -z "${kak_client_env_TMUX}" ] && tmux_keybindings="
2019-05-13 18:34:46 +00:00
$kak_opt_fzf_horizontal_map: open search result in horizontal split
$kak_opt_fzf_vertical_map: open search result in vertical split"
2019-03-03 18:31:23 +00:00
printf "%s\n" "info -title '${title}' '${message}${tmux_keybindings}'"
2019-05-13 18:34:46 +00:00
[ ! -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 %{fzf-sk-grep-handler} -fzf-impl %{sk -m -i -c '$kak_opt_fzf_sk_grep_command {}'} -fzf-args %{--expect $kak_opt_fzf_window_map $additional_flags} -multiple-cmd %{fzf-sk-populate-grep} -post-action %{buffer %opt{fzf_sk_first_file}}"
2019-03-02 19:15:33 +00:00
}}
2019-03-30 14:16:52 +00:00
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 "set-option global fzf_sk_first_file %&" file "&"
}'
}
fzf-sk-populate-grep %arg{1}
}
2019-03-02 19:15:33 +00:00
2019-03-30 13:53:38 +00:00
define-command -hidden fzf-sk-populate-grep -params 1 %{
try %{
buffer *grep*
} catch %{
edit -scratch *grep*
set-option buffer filetype grep
}
2019-10-04 12:50:51 +00:00
evaluate-commands -save-regs '"' -buffer *grep* %{
2019-03-30 13:53:38 +00:00
set-register dquote %arg{1}
execute-keys gjPo
}
}
2019-05-09 15:12:06 +00:00
§