lua: add options to highlight.on_yank (#12549)

NOTE: Configuration options have  changed for highlight.on_yank.

Check help for |:help highlight.on_yank()|
This commit is contained in:
Christian Clason
2020-07-06 03:30:12 +02:00
committed by GitHub
parent f9579d473e
commit 4ab7bbf3ea
3 changed files with 41 additions and 21 deletions

View File

@@ -23,24 +23,41 @@ function highlight.range(bufnr, ns, higroup, start, finish, rtype, inclusive)
end
local yank_ns = api.nvim_create_namespace('hlyank')
--- Highlight the yanked region
---
--- use from init.vim via
--- au TextYankPost * lua require'vim.highlight'.on_yank()
--- au TextYankPost * lua vim.highlight.on_yank()
--- customize highlight group and timeout via
--- au TextYankPost * lua require'vim.highlight'.on_yank("IncSearch", 500)
--- au TextYankPost * lua vim.highlight.on_yank {higroup="IncSearch", timeout=150}
--- customize conditions (here: do not highlight a visual selection) via
--- au TextYankPost * lua vim.highlight.on_yank {on_visual=false}
---
-- @param higroup highlight group for yanked region
-- @param timeout time in ms before highlight is cleared
-- @param event event structure
function highlight.on_yank(higroup, timeout, event)
event = event or vim.v.event
-- @param opts dictionary with options controlling the highlight:
-- - higroup highlight group for yanked region (default "IncSearch")
-- - timeout time in ms before highlight is cleared (default 150)
-- - on_macro highlight when executing macro (default false)
-- - on_visual highlight when yanking visual selection (default true)
-- - event event structure (default vim.v.event)
function highlight.on_yank(opts)
vim.validate {
opts = { opts,
function(t) if t == nil then return true else return type(t) == 'table' end end,
'a table or nil to configure options (see `:h highlight.on_yank`)',
}}
opts = opts or {}
local event = opts.event or vim.v.event
local on_macro = opts.on_macro or false
local on_visual = (opts.on_visual ~= false)
if (not on_macro) and vim.fn.reg_executing() ~= '' then return end
if event.operator ~= 'y' or event.regtype == '' then return end
higroup = higroup or "IncSearch"
timeout = timeout or 500
if (not on_visual) and event.visual then return end
local higroup = opts.higroup or "IncSearch"
local timeout = opts.timeout or 150
local bufnr = api.nvim_get_current_buf()
local yank_ns = api.nvim_create_namespace('')
api.nvim_buf_clear_namespace(bufnr, yank_ns, 0, -1)
local pos1 = vim.fn.getpos("'[")