From 73182de20c021132325080720347b3b2eeafdb3d Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Mon, 6 Nov 2017 20:52:24 +0800 Subject: [PATCH] doc.kak: Support jumping on links using --- rc/core/doc.kak | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/rc/core/doc.kak b/rc/core/doc.kak index a5d59fab..8059f063 100644 --- a/rc/core/doc.kak +++ b/rc/core/doc.kak @@ -1,7 +1,8 @@ declare-option -docstring "name of the client in which documentation is to be displayed" \ str docsclient -declare-option -hidden range-specs doc_render_ranges +declare-option -hidden range-specs doc_ranges +declare-option -hidden range-specs doc_links define-command -hidden -params 4 doc-render-regex %{ evaluate-commands -draft %{ try %{ @@ -10,12 +11,40 @@ define-command -hidden -params 4 doc-render-regex %{ execute-keys "%arg{3}" %sh{ ranges=$(echo "$kak_selections_desc" | sed -e "s/:/|$4:/g; s/\$/|$4/") - echo "update-option buffer doc_render_ranges" - echo "set-option -add buffer doc_render_ranges '$ranges'" + echo "update-option buffer doc_ranges" + echo "set-option -add buffer doc_ranges '$ranges'" } } } } +define-command -hidden doc-parse-links %{ + evaluate-commands -draft %{ try %{ + execute-keys \%s (.*?)#,.*? + execute-keys -draft s .*,| d + execute-keys H + set-option buffer doc_links %val{timestamp} + evaluate-commands -itersel %{ + set-option -add buffer doc_links "%val{selection_desc}|%reg{1}" + } + } } +} + +define-command doc-jump %{ + update-option buffer doc_links + %sh{ + printf "%s" "$kak_opt_doc_links" | awk -v RS=':' -v FS='[.,|]' ' + BEGIN { + l=ENVIRON["kak_cursor_line"]; + c=ENVIRON["kak_cursor_column"]; + } + l >= $1 && c >= $2 && l <= $3 && c <= $4 { + print "doc " $5 + exit + } + ' + } +} + define-command -params 1 -hidden doc-render %{ edit! -scratch *doc* execute-keys "!cat %arg{1}gg" @@ -26,22 +55,23 @@ define-command -params 1 -hidden doc-render %{ # Remove some line end markers try %{ execute-keys -draft \%s \h*(\+|:{2,})$ d } - # Setup the doc_render_ranges option - set-option buffer doc_render_ranges %val{timestamp} + # Setup the doc_ranges option + set-option buffer doc_ranges %val{timestamp} doc-render-regex \B(?.*? .*,| 'H' link + doc-parse-links # Remove escaping of * and ` try %{ execute-keys -draft \%s \\((?=\*)|(?=`)) d } set-option buffer readonly true - add-highlighter buffer ranges doc_render_ranges + add-highlighter buffer ranges doc_ranges add-highlighter buffer wrap -word -indent + map buffer normal :doc-jump } define-command -params 1 \