diff options
Diffstat (limited to 'src/nvim/mapping.c')
-rw-r--r-- | src/nvim/mapping.c | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/src/nvim/mapping.c b/src/nvim/mapping.c index d7747ee291..0cb94e6f5b 100644 --- a/src/nvim/mapping.c +++ b/src/nvim/mapping.c @@ -2558,26 +2558,22 @@ void modify_keymap(uint64_t channel_id, Buffer buffer, bool is_unmap, String mod const sctx_T save_current_sctx = api_set_sctx(channel_id); - if (opts != NULL && opts->callback.type == kObjectTypeLuaRef) { - lua_funcref = opts->callback.data.luaref; - opts->callback.data.luaref = LUA_NOREF; - } MapArguments parsed_args = MAP_ARGUMENTS_INIT; if (opts) { -#define KEY_TO_BOOL(name) \ - parsed_args.name = api_object_to_bool(opts->name, #name, false, err); \ - if (ERROR_SET(err)) { \ - goto fail_and_free; \ - } - - KEY_TO_BOOL(nowait); - KEY_TO_BOOL(noremap); - KEY_TO_BOOL(silent); - KEY_TO_BOOL(script); - KEY_TO_BOOL(expr); - KEY_TO_BOOL(unique); - KEY_TO_BOOL(replace_keycodes); -#undef KEY_TO_BOOL + parsed_args.nowait = opts->nowait; + parsed_args.noremap = opts->noremap; + parsed_args.silent = opts->silent; + parsed_args.script = opts->script; + parsed_args.expr = opts->expr; + parsed_args.unique = opts->unique; + parsed_args.replace_keycodes = opts->replace_keycodes; + if (HAS_KEY(opts, keymap, callback)) { + lua_funcref = opts->callback; + opts->callback = LUA_NOREF; + } + if (HAS_KEY(opts, keymap, desc)) { + parsed_args.desc = string_to_cstr(opts->desc); + } } parsed_args.buffer = !global; @@ -2593,11 +2589,6 @@ void modify_keymap(uint64_t channel_id, Buffer buffer, bool is_unmap, String mod goto fail_and_free; } - if (opts != NULL && opts->desc.type == kObjectTypeString) { - parsed_args.desc = string_to_cstr(opts->desc.data.string); - } else { - parsed_args.desc = NULL; - } if (parsed_args.lhs_len > MAXMAPLEN || parsed_args.alt_lhs_len > MAXMAPLEN) { api_set_error(err, kErrorTypeValidation, "LHS exceeds maximum map length: %s", lhs.data); goto fail_and_free; |