aboutsummaryrefslogtreecommitdiff
path: root/vis-lua.c
diff options
context:
space:
mode:
Diffstat (limited to 'vis-lua.c')
-rw-r--r--vis-lua.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/vis-lua.c b/vis-lua.c
index 5c52cce..96fe7ea 100644
--- a/vis-lua.c
+++ b/vis-lua.c
@@ -665,23 +665,14 @@ static int keymap(lua_State *L, Vis *vis, Win *win) {
const char *key = luaL_checkstring(L, 3);
const void *func = func_ref_new(L, 4);
const char *help = luaL_optstring(L, 5, NULL);
- KeyBinding *binding = vis_binding_new(vis);
- if (!binding)
- goto err;
- KeyAction *action = calloc(1, sizeof *action);
+ KeyBinding *binding = NULL;
+ KeyAction *action = vis_action_new(vis, NULL, help, keymapping, (Arg){ .v = func });
if (!action)
goto err;
+ if (!(binding = vis_binding_new(vis)))
+ goto err;
binding->action = action;
- *action = (KeyAction){
- .name = NULL,
- .help = help ? strdup(help) : help,
- .func = keymapping,
- .arg = (const Arg){
- .v = func,
- },
- };
-
if (win) {
if (!vis_window_mode_map(win, mode, true, key, binding))
goto err;
@@ -694,6 +685,7 @@ static int keymap(lua_State *L, Vis *vis, Win *win) {
return 1;
err:
vis_binding_free(vis, binding);
+ vis_action_free(vis, action);
lua_pushboolean(L, false);
return 1;
}