diff options
author | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-06-21 16:06:25 +0200 |
---|---|---|
committer | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-06-21 16:06:25 +0200 |
commit | 10e12bbe481af7974739060f51210f7948fc1df9 (patch) | |
tree | 83722aca11901a5bf7ad433aac6a6b0ba05cf79a /config/essentials/vis/yank-highlight.lua | |
parent | 4775688e796faece72c6621bcd94f6eb4ebac5ff (diff) | |
parent | c9cc72113521b793d1baa0d2f558b97478a6acf4 (diff) |
Merge branch 'main' of debuc.com:dotfiles
Diffstat (limited to 'config/essentials/vis/yank-highlight.lua')
-rw-r--r-- | config/essentials/vis/yank-highlight.lua | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/config/essentials/vis/yank-highlight.lua b/config/essentials/vis/yank-highlight.lua new file mode 100644 index 0000000..37a9578 --- /dev/null +++ b/config/essentials/vis/yank-highlight.lua @@ -0,0 +1,37 @@ +require("vis") + +local M = { + style = "reverse", -- Style used for highlighting + duration = 0.2, -- [s] Time to remain highlighted (10 ms precision) +} + +vis.events.subscribe(vis.events.INIT, function() + local yank = vis:action_register("highlighted-yank", function() + vis.win:style_define(vis.win.STYLE_SELECTION, M.style) + vis:redraw() + local tstamp = os.clock() + while os.clock() - tstamp < M.duration do end + vis.win:style_define(vis.win.STYLE_SELECTION, vis.lexers.STYLE_SELECTION) + vis:redraw() + vis:feedkeys("<vis-operator-yank>") + end, "Yank operator with highlighting") + vis:map(vis.modes.OPERATOR_PENDING, "y", yank) + vis:map(vis.modes.VISUAL, "y", yank) + vis:map(vis.modes.VISUAL_LINE, "y", yank) + + vis:map(vis.modes.NORMAL, "y", function(keys) + local sel_end_chrs = "$%^{}()wp" + if #keys < 1 or sel_end_chrs:find(keys:sub(-1), 1, true) == nil then + if keys:find("<Escape>") then + return #keys + end + return -1 + end + vis:feedkeys("<vis-mode-visual-charwise>") + vis:feedkeys(keys) + vis:feedkeys("y<Escape>") + return #keys + end) +end) + +return M |