From e2e63bd045491f36e12c924fddbe76b3ef884b38 Mon Sep 17 00:00:00 2001 From: altermo <107814000+altermo@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:39:32 +0100 Subject: fix(lua): make highlight.on_yank use win-local highlight (#27349) Currently, highlight.on_yank() does buffer-local highlighting, this PR makes it window scoped. Also fix the problem that when yanking in a buffer, moving to another buffer, and yanking before the original buffer highlight disappears, the original buffer highlight won't disappear on timeout. --- test/functional/lua/highlight_spec.lua | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'test') diff --git a/test/functional/lua/highlight_spec.lua b/test/functional/lua/highlight_spec.lua index f304bec411..197f3139f3 100644 --- a/test/functional/lua/highlight_spec.lua +++ b/test/functional/lua/highlight_spec.lua @@ -1,9 +1,11 @@ local helpers = require('test.functional.helpers')(after_each) local exec_lua = helpers.exec_lua local eq = helpers.eq +local neq = helpers.neq local eval = helpers.eval local command = helpers.command local clear = helpers.clear +local api = helpers.api describe('vim.highlight.on_yank', function() before_each(function() @@ -31,4 +33,34 @@ describe('vim.highlight.on_yank', function() ]]) eq('', eval('v:errmsg')) end) + + it('does not show in another window', function() + command('vsplit') + exec_lua([[ + vim.api.nvim_buf_set_mark(0,"[",1,1,{}) + vim.api.nvim_buf_set_mark(0,"]",1,1,{}) + vim.highlight.on_yank({timeout = math.huge, on_macro = true, event = {operator = "y"}}) + ]]) + neq({}, api.nvim_win_get_ns(0)) + command('wincmd w') + eq({}, api.nvim_win_get_ns(0)) + end) + + it('removes old highlight if new one is created before old one times out', function() + command('vnew') + exec_lua([[ + vim.api.nvim_buf_set_mark(0,"[",1,1,{}) + vim.api.nvim_buf_set_mark(0,"]",1,1,{}) + vim.highlight.on_yank({timeout = math.huge, on_macro = true, event = {operator = "y"}}) + ]]) + neq({}, api.nvim_win_get_ns(0)) + command('wincmd w') + exec_lua([[ + vim.api.nvim_buf_set_mark(0,"[",1,1,{}) + vim.api.nvim_buf_set_mark(0,"]",1,1,{}) + vim.highlight.on_yank({timeout = math.huge, on_macro = true, event = {operator = "y"}}) + ]]) + command('wincmd w') + eq({}, api.nvim_win_get_ns(0)) + end) end) -- cgit