feat(mapset): support restoring "replace_keycodes" and "desc"

This commit is contained in:
zeertzjq
2022-08-01 16:46:58 +08:00
parent cabb23ea4d
commit d954e8da62
2 changed files with 38 additions and 3 deletions

View File

@@ -428,6 +428,9 @@ static int str_to_mapargs(const char_u *strargs, bool is_unmap, MapArguments *ma
return 0; return 0;
} }
/// @param args "rhs", "rhs_lua", "orig_rhs", "expr", "silent", "nowait", "replace_keycodes" and
/// and "desc" fields are used.
/// "rhs", "rhs_lua", "orig_rhs" fields are cleared if "simplified" is false.
/// @param sid -1 to use current_sctx /// @param sid -1 to use current_sctx
static void map_add(buf_T *buf, mapblock_T **map_table, mapblock_T **abbr_table, const char_u *keys, static void map_add(buf_T *buf, mapblock_T **map_table, mapblock_T **abbr_table, const char_u *keys,
MapArguments *args, int noremap, int mode, bool is_abbr, scid_T sid, MapArguments *args, int noremap, int mode, bool is_abbr, scid_T sid,
@@ -2162,15 +2165,15 @@ void f_mapset(typval_T *argvars, typval_T *rettv, FunPtr fptr)
if (tv_dict_get_number(d, "script") != 0) { if (tv_dict_get_number(d, "script") != 0) {
noremap = REMAP_SCRIPT; noremap = REMAP_SCRIPT;
} }
MapArguments args = { // TODO(zeertzjq): support restoring "callback"?
// TODO: support "callback" and "desc"
MapArguments args = {
.rhs = (char_u *)rhs, .rhs = (char_u *)rhs,
.rhs_lua = LUA_NOREF, .rhs_lua = LUA_NOREF,
.orig_rhs = vim_strsave((char_u *)orig_rhs), .orig_rhs = vim_strsave((char_u *)orig_rhs),
.expr = tv_dict_get_number(d, "expr") != 0, .expr = tv_dict_get_number(d, "expr") != 0,
.silent = tv_dict_get_number(d, "silent") != 0, .silent = tv_dict_get_number(d, "silent") != 0,
.nowait = tv_dict_get_number(d, "nowait") != 0, .nowait = tv_dict_get_number(d, "nowait") != 0,
.replace_keycodes = tv_dict_get_number(d, "replace_keycodes") != 0,
.desc = tv_dict_get_string(d, "desc", false),
}; };
scid_T sid = (scid_T)tv_dict_get_number(d, "sid"); scid_T sid = (scid_T)tv_dict_get_number(d, "sid");
linenr_T lnum = (linenr_T)tv_dict_get_number(d, "lnum"); linenr_T lnum = (linenr_T)tv_dict_get_number(d, "lnum");

View File

@@ -3,7 +3,10 @@ local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear local clear = helpers.clear
local eq = helpers.eq local eq = helpers.eq
local eval = helpers.eval local eval = helpers.eval
local expect = helpers.expect
local feed = helpers.feed
local funcs = helpers.funcs local funcs = helpers.funcs
local meths = helpers.meths
local nvim = helpers.nvim local nvim = helpers.nvim
local source = helpers.source local source = helpers.source
local command = helpers.command local command = helpers.command
@@ -163,3 +166,32 @@ describe('maparg()', function()
eq(acmap('e`', 'f`'), funcs.maparg(ac('e`'), 'n', 0, 1)) eq(acmap('e`', 'f`'), funcs.maparg(ac('e`'), 'n', 0, 1))
end) end)
end) end)
describe('mapset()', function()
before_each(clear)
it('can restore mapping description from the dict returned by maparg()', function()
meths.set_keymap('n', 'lhs', 'rhs', {desc = 'map description'})
eq('\nn lhs rhs\n map description',
helpers.exec_capture("nmap lhs"))
local mapargs = funcs.maparg('lhs', 'n', false, true)
meths.del_keymap('n', 'lhs')
eq('\nNo mapping found', helpers.exec_capture("nmap lhs"))
funcs.mapset('n', false, mapargs)
eq('\nn lhs rhs\n map description',
helpers.exec_capture("nmap lhs"))
end)
it('can restore "replace_keycodes" from the dict returned by maparg()', function()
meths.set_keymap('i', 'foo', [['<l' .. 't>']], {expr = true, replace_keycodes = true})
feed('Afoo')
expect('<')
local mapargs = funcs.maparg('foo', 'i', false, true)
meths.set_keymap('i', 'foo', [['<l' .. 't>']], {expr = true})
feed('foo')
expect('<<lt>')
funcs.mapset('i', false, mapargs)
feed('foo')
expect('<<lt><')
end)
end)