@@ -122,8 +122,9 @@ keymap.get_mapping = function(mode, lhs)
|
|||||||
if keymap.equals(map.lhs, lhs) then
|
if keymap.equals(map.lhs, lhs) then
|
||||||
return {
|
return {
|
||||||
lhs = map.lhs,
|
lhs = map.lhs,
|
||||||
rhs = map.rhs,
|
rhs = map.rhs or '',
|
||||||
expr = map.expr == 1,
|
expr = map.expr == 1,
|
||||||
|
callback = map.callback,
|
||||||
noremap = map.noremap == 1,
|
noremap = map.noremap == 1,
|
||||||
script = map.script == 1,
|
script = map.script == 1,
|
||||||
silent = map.silent == 1,
|
silent = map.silent == 1,
|
||||||
@@ -137,8 +138,9 @@ keymap.get_mapping = function(mode, lhs)
|
|||||||
if keymap.equals(map.lhs, lhs) then
|
if keymap.equals(map.lhs, lhs) then
|
||||||
return {
|
return {
|
||||||
lhs = map.lhs,
|
lhs = map.lhs,
|
||||||
rhs = map.rhs,
|
rhs = map.rhs or '',
|
||||||
expr = map.expr == 1,
|
expr = map.expr == 1,
|
||||||
|
callback = map.callback,
|
||||||
noremap = map.noremap == 1,
|
noremap = map.noremap == 1,
|
||||||
script = map.script == 1,
|
script = map.script == 1,
|
||||||
silent = map.silent == 1,
|
silent = map.silent == 1,
|
||||||
@@ -152,6 +154,7 @@ keymap.get_mapping = function(mode, lhs)
|
|||||||
lhs = lhs,
|
lhs = lhs,
|
||||||
rhs = lhs,
|
rhs = lhs,
|
||||||
expr = false,
|
expr = false,
|
||||||
|
callback = nil,
|
||||||
noremap = true,
|
noremap = true,
|
||||||
script = false,
|
script = false,
|
||||||
silent = false,
|
silent = false,
|
||||||
@@ -172,35 +175,49 @@ keymap.evacuate = function(bufnr, mode, lhs)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Keep existing mapping as <Plug> mapping. We escape fisrt recursive key sequence. See `:help recursive_mapping`)
|
-- Keep existing mapping as <Plug> mapping. We escape fisrt recursive key sequence. See `:help recursive_mapping`)
|
||||||
local rhs = map.rhs
|
local rhs, callback = '', nil
|
||||||
if not map.noremap and map.expr then
|
if map.callback then
|
||||||
-- remap & expr mapping should evacuate as <Plug> mapping with solving recursive mapping.
|
callback = function(...)
|
||||||
rhs = function()
|
local keys = map.callback(...)
|
||||||
-- Feed new key sequence to expand recursive mapping.
|
if map.noremap then
|
||||||
vim.api.nvim_feedkeys(keymap.t(keymap.recursive(bufnr, mode, lhs, vim.api.nvim_eval(map.rhs))), 'i', true)
|
return keys
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_feedkeys(keymap.t(keymap.recursive(bufnr, mode, lhs, keys)), 'i', true)
|
||||||
return keymap.t('<Ignore>')
|
return keymap.t('<Ignore>')
|
||||||
end
|
end
|
||||||
elseif map.noremap and map.expr then
|
else
|
||||||
-- noremap & expr mapping should always evacuate as <Plug> mapping.
|
rhs = map.rhs
|
||||||
rhs = rhs
|
if not map.noremap and map.expr then
|
||||||
elseif map.script then
|
-- remap & expr mapping should evacuate as <Plug> mapping with solving recursive mapping.
|
||||||
-- script mapping should always evacuate as <Plug> mapping.
|
rhs = function()
|
||||||
rhs = rhs
|
-- Feed new key sequence to expand recursive mapping.
|
||||||
elseif not map.noremap then
|
vim.api.nvim_feedkeys(keymap.t(keymap.recursive(bufnr, mode, lhs, vim.api.nvim_eval(map.rhs))), 'i', true)
|
||||||
-- remap & non-expr mapping should be checked if recursive or not.
|
return keymap.t('<Ignore>')
|
||||||
rhs = keymap.recursive(bufnr, mode, lhs, rhs)
|
end
|
||||||
if keymap.equals(rhs, map.rhs) or map.noremap then
|
elseif map.noremap and map.expr then
|
||||||
|
-- noremap & expr mapping should always evacuate as <Plug> mapping.
|
||||||
|
rhs = rhs
|
||||||
|
elseif map.script then
|
||||||
|
-- script mapping should always evacuate as <Plug> mapping.
|
||||||
|
rhs = rhs
|
||||||
|
elseif not map.noremap then
|
||||||
|
-- remap & non-expr mapping should be checked if recursive or not.
|
||||||
|
rhs = keymap.recursive(bufnr, mode, lhs, rhs)
|
||||||
|
if keymap.equals(rhs, map.rhs) or map.noremap then
|
||||||
|
return { keys = rhs, mode = 'it' .. (map.noremap and 'n' or '') }
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- noremap & non-expr mapping doesn't need to evacuate.
|
||||||
return { keys = rhs, mode = 'it' .. (map.noremap and 'n' or '') }
|
return { keys = rhs, mode = 'it' .. (map.noremap and 'n' or '') }
|
||||||
end
|
end
|
||||||
else
|
|
||||||
-- noremap & non-expr mapping doesn't need to evacuate.
|
|
||||||
return { keys = rhs, mode = 'it' .. (map.noremap and 'n' or '') }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local fallback = ('<Plug>(cmp.utils.keymap.evacuate:%s)'):format(map.lhs)
|
local fallback = ('<Plug>(cmp.utils.keymap.evacuate:%s)'):format(map.lhs)
|
||||||
keymap.set_map(bufnr, mode, fallback, rhs, {
|
keymap.set_map(bufnr, mode, fallback, rhs, {
|
||||||
expr = map.expr,
|
expr = map.expr,
|
||||||
noremap = map.noremap,
|
noremap = map.noremap,
|
||||||
|
callback = callback,
|
||||||
script = map.script,
|
script = map.script,
|
||||||
silent = mode ~= 'c', -- I can't understand but it solves the #427 (wilder.nvim's mapping does not work if silent=true in cmdline mode...)
|
silent = mode ~= 'c', -- I can't understand but it solves the #427 (wilder.nvim's mapping does not work if silent=true in cmdline mode...)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user