Support <C-r>= and <Cmd>
This commit is contained in:
@@ -49,6 +49,35 @@ keymap.to_keymap = function(s)
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Replace key in keys except in the <C-r> or <Cmd> sequence.
|
||||||
|
keymap.replace = function(keys, key, rep)
|
||||||
|
local expr = false
|
||||||
|
local new_keys = {}
|
||||||
|
local i = 1
|
||||||
|
while i <= #keys do
|
||||||
|
if '<C-R>=' == string.sub(keys, i, i + #'<C-R>=' - 1) then
|
||||||
|
table.insert(new_keys, '<C-R>=')
|
||||||
|
expr = true
|
||||||
|
i = i + #'<C-R>='
|
||||||
|
elseif '<Cmd>' == string.sub(keys, i, i + #'<Cmd>' - 1) then
|
||||||
|
table.insert(new_keys, '<Cmd>')
|
||||||
|
expr = true
|
||||||
|
i = i + #'<Cmd>'
|
||||||
|
elseif expr and '<CR>' == string.sub(keys, i, i + #'<CR>' - 1) then
|
||||||
|
table.insert(new_keys, '<CR>')
|
||||||
|
i = i + #'<CR>'
|
||||||
|
expr = false
|
||||||
|
elseif not expr and key == string.sub(keys, i, i + #key - 1) then
|
||||||
|
table.insert(new_keys, rep)
|
||||||
|
i = i + #key
|
||||||
|
else
|
||||||
|
table.insert(new_keys, string.sub(keys, i, i))
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return table.concat(new_keys, '')
|
||||||
|
end
|
||||||
|
|
||||||
---Feedkeys with callback
|
---Feedkeys with callback
|
||||||
keymap.feedkeys = setmetatable({
|
keymap.feedkeys = setmetatable({
|
||||||
callbacks = {}
|
callbacks = {}
|
||||||
@@ -149,8 +178,7 @@ misc.set(_G, { 'cmp', 'utils', 'keymap', 'listen', 'run' }, function(mode, keys)
|
|||||||
noremap = true,
|
noremap = true,
|
||||||
silent = true,
|
silent = true,
|
||||||
})
|
})
|
||||||
-- TODO: Do not escape the keys inside <Cmd> ... <CR> / <C-r> = ... <CR>.
|
rhs = keymap.replace(rhs, existing.lhs, '<Plug>(cmp-utils-keymap-listen-run:lhs)')
|
||||||
rhs = string.gsub(rhs, vim.pesc(existing.lhs), '<Plug>(cmp-utils-keymap-listen-run:lhs)')
|
|
||||||
end
|
end
|
||||||
vim.api.nvim_buf_set_keymap(0, mode, '<Plug>(cmp-utils-keymap-listen-run:_)', rhs, {
|
vim.api.nvim_buf_set_keymap(0, mode, '<Plug>(cmp-utils-keymap-listen-run:_)', rhs, {
|
||||||
expr = existing.expr ~= 0,
|
expr = existing.expr ~= 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user