runtime(hlyank): add the hlyank package
closes: #16919
related: #16866
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/Filelist b/Filelist
index 8333614..95bed7d 100644
--- a/Filelist
+++ b/Filelist
@@ -805,6 +805,7 @@
runtime/pack/dist/opt/editorconfig/plugin/editorconfig.vim \
runtime/pack/dist/opt/helptoc/autoload/helptoc.vim \
runtime/pack/dist/opt/helptoc/plugin/helptoc.vim \
+ runtime/pack/dist/opt/hlyank/plugin/hlyank.vim \
runtime/pack/dist/opt/justify/plugin/justify.vim \
runtime/pack/dist/opt/matchit/plugin/matchit.vim \
runtime/pack/dist/opt/matchit/doc/matchit.txt \
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index b7791cc..dc47f41 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -4998,6 +4998,8 @@
Can also be used as a |method|: >
getpos('.')->getregionpos(getpos("'a"))
<
+ For an example, see the highlight-yank plugin |52.6|
+
Return type: list<list<list<number>>>
diff --git a/runtime/doc/tags b/runtime/doc/tags
index f315390..1eebe14 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -8247,6 +8247,7 @@
hlget() builtin.txt /*hlget()*
hlsearch-variable eval.txt /*hlsearch-variable*
hlset() builtin.txt /*hlset()*
+hlyank-install usr_05.txt /*hlyank-install*
holy-grail index.txt /*holy-grail*
home intro.txt /*home*
home-replace editing.txt /*home-replace*
@@ -9411,6 +9412,7 @@
package-documentation repeat.txt /*package-documentation*
package-editorconfig usr_05.txt /*package-editorconfig*
package-helptoc helphelp.txt /*package-helptoc*
+package-hlyank usr_05.txt /*package-hlyank*
package-justify usr_25.txt /*package-justify*
package-matchit usr_05.txt /*package-matchit*
package-nohlsearch usr_05.txt /*package-nohlsearch*
diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt
index 93231f6..4b7bc9f 100644
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -1,4 +1,4 @@
-*usr_05.txt* For Vim version 9.1. Last change: 2025 Jan 11
+*usr_05.txt* For Vim version 9.1. Last change: 2025 Mar 18
VIM USER MANUAL - by Bram Moolenaar
@@ -437,7 +437,7 @@
:h editorconfig.txt
-Adding comment package *comment-install* *package-comment*
+Adding the comment package *comment-install* *package-comment*
Load the plugin with this command: >
packadd comment
@@ -450,7 +450,7 @@
:h comment.txt
-Adding nohlsearch package *nohlsearch-install* *package-nohlsearch*
+Adding the nohlsearch package *nohlsearch-install* *package-nohlsearch*
Load the plugin with this command: >
packadd nohlsearch
@@ -464,6 +464,29 @@
au! nohlsearch
<
+Adding the highlight-yank package *hlyank-install* *package-hlyank*
+
+Load the plugin with this command: >
+ packadd hlyank
+<
+This package briefly highlights the affected region of the last |yank|
+command. See |52.6| for a simplified implementation using the |getregionpos()|
+function.
+
+The plugin understands the following configuration variables (the settings
+show the default values).
+
+To specify a different highlighting group, use: >
+ :let g:hlyank_hlgroup = 'IncSearch'
+<
+To use a different highlighting duration, use: >
+ :let g:hlyank_duration = 300
+<
+To highlight in visual mode, use: >
+ :let g:hlyank_invisual = v:true
+
+To disable the effect of the plugin after it has been loaded: >
+ au! hlyank
More information about packages can be found here: |packages|.
diff --git a/runtime/doc/usr_52.txt b/runtime/doc/usr_52.txt
index 6a8204d..19a37dc 100644
--- a/runtime/doc/usr_52.txt
+++ b/runtime/doc/usr_52.txt
@@ -1,4 +1,4 @@
-*usr_52.txt* For Vim version 9.1. Last change: 2025 Mar 12
+*usr_52.txt* For Vim version 9.1. Last change: 2025 Mar 17
VIM USER MANUAL - by Bram Moolenaar
@@ -346,11 +346,8 @@
HIGHLIGHT YANK PLUGIN
-Here is an example for highlighting the yanked region. It makes use of the
-|getregionpos()| function, available since Vim 9.1.0446.
-
-Copy the following example into a new file and place it into your plugin directory
-and it will be active next time you start Vim. |add-plugin|: >
+Vim comes with the highlight-yank plugin, written in Vim9 script
+|hlyank-install|, here is a simplified implementation: >vim
vim9script
@@ -375,6 +372,9 @@
autocmd TextYankPost * HighlightedYank()
<
+For the complete example, have a look into the package located at
+`$VIMRUNTIME/pack/dist/opt/hlyank/`
+
==============================================================================
Next chapter: |usr_90.txt| Installing Vim
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index 3e5e681..6ecf642 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt* For Vim version 9.1. Last change: 2025 Mar 18
+*version9.txt* For Vim version 9.1. Last change: 2025 Mar 19
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -41556,7 +41556,8 @@
*new-other-9.2*
Other new features ~
------------------
-The new plugins |comment-install| and |nohlsearch-install| are included.
+The new packages |package-comment|, |package-nohlsearch| and |package-hlyank|
+are included.
Support for Wayland UI.
diff --git a/runtime/pack/dist/opt/hlyank/plugin/hlyank.vim b/runtime/pack/dist/opt/hlyank/plugin/hlyank.vim
new file mode 100644
index 0000000..079e38a
--- /dev/null
+++ b/runtime/pack/dist/opt/hlyank/plugin/hlyank.vim
@@ -0,0 +1,38 @@
+vim9script
+
+# Highlight Yank plugin
+# Last Change: 2025 Mar 17
+
+def HighlightedYank()
+
+ var hlgroup = get(g:, "hlyank_hlgroup", "IncSearch")
+ var duration = get(g:, "hlyank_duration", 300)
+ var in_visual = get(g:, "hlyank_invisual", true)
+
+ if v:event.operator ==? 'y'
+ if !in_visual && visualmode() != null_string
+ visualmode(1)
+ return
+ endif
+ # if clipboard has autoselect (default on linux) exiting from Visual with ESC
+ # generates bogus event and this highlights previous yank
+ if &clipboard =~ 'autoselect' && v:event.regname == "*" && v:event.visual
+ return
+ endif
+ var [beg, end] = [getpos("'["), getpos("']")]
+ var type = v:event.regtype ?? 'v'
+ var pos = getregionpos(beg, end, {type: type, exclusive: false})
+ var m = matchaddpos(hlgroup, pos->mapnew((_, v) => {
+ var col_beg = v[0][2] + v[0][3]
+ var col_end = v[1][2] + v[1][3] + 1
+ return [v[0][1], col_beg, col_end - col_beg]
+ }))
+ var winid = win_getid()
+ timer_start(duration, (_) => m->matchdelete(winid))
+ endif
+enddef
+
+augroup hlyank
+ autocmd!
+ autocmd TextYankPost * HighlightedYank()
+augroup END