mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	 e2e63bd045
			
		
	
	e2e63bd045
	
	
	
		
			
			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.
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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()
 | |
|     clear()
 | |
|   end)
 | |
| 
 | |
|   it('does not show errors even if buffer is wiped before timeout', function()
 | |
|     command('new')
 | |
|     exec_lua([[
 | |
|       vim.highlight.on_yank({timeout = 10, on_macro = true, event = {operator = "y", regtype = "v"}})
 | |
|       vim.cmd('bwipeout!')
 | |
|     ]])
 | |
|     vim.uv.sleep(10)
 | |
|     helpers.feed('<cr>') -- avoid hang if error message exists
 | |
|     eq('', eval('v:errmsg'))
 | |
|   end)
 | |
| 
 | |
|   it('does not close timer twice', function()
 | |
|     exec_lua([[
 | |
|       vim.highlight.on_yank({timeout = 10, on_macro = true, event = {operator = "y"}})
 | |
|       vim.uv.sleep(10)
 | |
|       vim.schedule(function()
 | |
|         vim.highlight.on_yank({timeout = 0, on_macro = true, event = {operator = "y"}})
 | |
|       end)
 | |
|     ]])
 | |
|     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)
 |