diff options
author | bfredl <bjorn.linse@gmail.com> | 2023-08-01 14:01:19 +0200 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2023-08-07 13:11:15 +0200 |
commit | 7bc93e0e2f246dd78026a3472d929a0fe450f70d (patch) | |
tree | 9e5b99830c3f08e0ffd75c7a0533b39033490a5b /src/nvim/mapping.c | |
parent | c01e624b0762b24a4988bf9474a57d5b6278d180 (diff) | |
download | rneovim-7bc93e0e2f246dd78026a3472d929a0fe450f70d.tar.gz rneovim-7bc93e0e2f246dd78026a3472d929a0fe450f70d.tar.bz2 rneovim-7bc93e0e2f246dd78026a3472d929a0fe450f70d.zip |
refactor(api): use typed keysets
Initially this is just for geting rid of boilerplate,
but eventually the types could get exposed as metadata
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; |