vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 2e06d6de32ee1a8b59bf34616aac1342fb4a4d5d
parent ba88dfe9043188a8a20b9a43ed2b6b3f1644daa5
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Thu, 21 Apr 2016 09:47:00 +0200

vis: do not lazy allocate :-commands

The built in commands should always be available.

Diffstat:
Msam.c | 20+++++++++++---------
Msam.h | 3++-
Mvis.c | 2++
3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/sam.c b/sam.c @@ -163,6 +163,17 @@ static const CommandDef cmds[] = { static const CommandDef cmddef_select = { { "s" }, 0, NULL, cmd_select }; +bool sam_init(Vis *vis) { + if (!(vis->cmds = map_new())) + return false; + bool ret = true; + for (const CommandDef *cmd = cmds; cmd && cmd->name[0]; cmd++) { + for (const char *const *name = cmd->name; *name; name++) + ret &= map_put(vis->cmds, *name, cmd); + } + return ret; +} + const char *sam_error(enum SamError err) { static const char *error_msg[] = { [SAM_ERR_OK] = "Success", @@ -474,15 +485,6 @@ static void command_free(Command *cmd) { } static const CommandDef *command_lookup(Vis *vis, const char *name) { - if (!vis->cmds) { - if (!(vis->cmds = map_new())) - return NULL; - - for (const CommandDef *cmd = cmds; cmd && cmd->name[0]; cmd++) { - for (const char *const *name = cmd->name; *name; name++) - map_put(vis->cmds, *name, cmd); - } - } return map_closest(vis->cmds, name); } diff --git a/sam.h b/sam.h @@ -17,7 +17,8 @@ enum SamError { SAM_ERR_EXECUTE, }; -enum SamError sam_cmd(Vis *vis, const char *cmd); +bool sam_init(Vis*); +enum SamError sam_cmd(Vis*, const char *cmd); const char *sam_error(enum SamError); #endif diff --git a/vis.c b/vis.c @@ -364,6 +364,8 @@ Vis *vis_new(Ui *ui, VisEvent *event) { goto err; if (!(vis->keymap = map_new())) goto err; + if (!sam_init(vis)) + goto err; vis->mode_prev = vis->mode = &vis_modes[VIS_MODE_NORMAL]; vis->event = event; if (event && event->vis_init)