From de7dbf7f673893aa2f0c596d00bdd54e773472ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Pankowski?= Date: Wed, 27 May 2026 09:58:13 +0200 Subject: [PATCH] kakoune: file and project symbols: support spaces in first token (example css) uses non-breaking space as a separator and assumes that first numeric token (starting from second one) is the line number (i.e., assumes that the searched token does not contain space delimited number) --- kakoune/.config/kak/kakrc | 8 ++++---- kakoune/.config/kak/scripts/filesymbols.awk | 9 +++++++++ kakoune/.config/kak/scripts/filesymbolscmd.awk | 10 ++++++++++ kakoune/.config/kak/scripts/projectsymbols.awk | 9 +++++++++ kakoune/.config/kak/scripts/projectsymbolscmd.awk | 11 +++++++++++ 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 kakoune/.config/kak/scripts/filesymbols.awk create mode 100644 kakoune/.config/kak/scripts/filesymbolscmd.awk create mode 100644 kakoune/.config/kak/scripts/projectsymbols.awk create mode 100644 kakoune/.config/kak/scripts/projectsymbolscmd.awk 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 "} ," + } +}