diff --git a/kakoune/.config/kak/kakrc b/kakoune/.config/kak/kakrc index 7cc6910..206a70c 100644 --- a/kakoune/.config/kak/kakrc +++ b/kakoune/.config/kak/kakrc @@ -136,17 +136,17 @@ define-command -override git-hide-diff %{ define-command -override ctags-file-symbols %{ prompt -menu -shell-script-candidates %{ - ctags -uo - -x "$kak_buffile" | awk '{ print $1, $2, $3 }' + ctags -uo - -x "$kak_buffile" | awk -f "$kak_config/scripts/filesymbols.awk" } 'File symbols: ' %{ - evaluate-commands %sh{ printf '%s\n' "$kak_text" | awk '{ print "execute-keys", $3, "g", "/\\b" $1 "\\b" }' } + evaluate-commands %sh{ awk -f "$kak_config/scripts/filesymbolscmd.awk" # "$kak_text" } } } define-command -override ctags-project-symbols %{ prompt -menu -shell-script-candidates %{ - git ls-files | xargs wc | awk '$1 > 0 && $3/$1 < 1024 { print $4 }' | xargs ctags -uo - -x | awk '{ print $1, $2, $3, $4 }' + git ls-files | xargs wc | awk '$1 > 0 && $3/$1 < 1024 { print $4 }' | xargs ctags -uo - -x | awk -f "$kak_config/scripts/projectsymbols.awk" } 'Project symbols: ' %{ - evaluate-commands %sh{ printf '%s\n' "$kak_text" | awk '{ print "edit --", $4, $3 "; execute-keys /\\b" $1 "\\b" }' } + evaluate-commands %sh{ awk -f "$kak_config/scripts/projectsymbolscmd.awk" # "$kak_text" } } } diff --git a/kakoune/.config/kak/scripts/filesymbols.awk b/kakoune/.config/kak/scripts/filesymbols.awk new file mode 100644 index 0000000..e787a13 --- /dev/null +++ b/kakoune/.config/kak/scripts/filesymbols.awk @@ -0,0 +1,9 @@ +{ + for (i = 3; i < NF; ++i) { + if ($i ~ /^[0-9]+$/) { + j = match($0, "[ ]+" $(i-1) "[ ]+" $i " ") + print substr($0, 0, j - 1) "\u00a0" $(i-1) "\u00a0" $i + break + } + } +} diff --git a/kakoune/.config/kak/scripts/filesymbolscmd.awk b/kakoune/.config/kak/scripts/filesymbolscmd.awk new file mode 100644 index 0000000..8ba1586 --- /dev/null +++ b/kakoune/.config/kak/scripts/filesymbolscmd.awk @@ -0,0 +1,10 @@ +BEGIN { + n = split(ENVIRON["kak_text"], a, "\u00a0") + line = a[3] + if (n == 3 && line ~ /^[0-9]+/) { + pat = a[1] + gsub(/'/, "''", pat) + gsub(/\\/, "\\\\", pat) + print "execute-keys " line " g vv x s '/\\b\\Q" pat "\\E\\b|\\Q" pat "' ," + } +} diff --git a/kakoune/.config/kak/scripts/projectsymbols.awk b/kakoune/.config/kak/scripts/projectsymbols.awk new file mode 100644 index 0000000..4f2e780 --- /dev/null +++ b/kakoune/.config/kak/scripts/projectsymbols.awk @@ -0,0 +1,9 @@ +{ + for (i = 3; i < NF; ++i) { + if ($i ~ /^[0-9]+$/) { + j = match($0, "[ ]+" $(i-1) "[ ]+" $i " ") + print substr($0, 0, j - 1) "\u00a0" $(i-1) "\u00a0" $i "\u00a0" $(i+1) + break + } + } +} diff --git a/kakoune/.config/kak/scripts/projectsymbolscmd.awk b/kakoune/.config/kak/scripts/projectsymbolscmd.awk new file mode 100644 index 0000000..cfa7d43 --- /dev/null +++ b/kakoune/.config/kak/scripts/projectsymbolscmd.awk @@ -0,0 +1,11 @@ +BEGIN { + n = split(ENVIRON["kak_text"], a, "\u00a0") + line = a[3] + if (n == 4 && line ~ /^[0-9]+/) { + pat = a[1] + gsub(/'/, "''", pat) + gsub(/\\/, "\\\\", pat) + print "edit --", a[4], line + print "execute-keys vv x s %{/\\b\\Q" pat "\\E\\b|\\Q" pat "} ," + } +}