Skip to content

Commit

Permalink
vis: simplify mode lookup for :map and :unmap
Browse files Browse the repository at this point in the history
  • Loading branch information
martanne committed Jan 6, 2017
1 parent 604c866 commit 6d2d23a
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 20 deletions.
21 changes: 2 additions & 19 deletions vis-cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -741,23 +741,6 @@ static bool cmd_help(Vis *vis, Win *win, Command *cmd, const char *argv[], Curso
return true;
}

static enum VisMode str2vismode(const char *mode) {
const char *modes[] = {
[VIS_MODE_NORMAL] = "normal",
[VIS_MODE_OPERATOR_PENDING] = "operator-pending",
[VIS_MODE_VISUAL] = "visual",
[VIS_MODE_VISUAL_LINE] = "visual-line",
[VIS_MODE_INSERT] = "insert",
[VIS_MODE_REPLACE] = "replace",
};

for (size_t i = 0; i < LENGTH(modes); i++) {
if (mode && modes[i] && strcmp(mode, modes[i]) == 0)
return i;
}
return VIS_MODE_INVALID;
}

static bool cmd_langmap(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) {
const char *nonlatin = argv[1];
const char *latin = argv[2];
Expand Down Expand Up @@ -792,7 +775,7 @@ static bool cmd_langmap(Vis *vis, Win *win, Command *cmd, const char *argv[], Cu
static bool cmd_map(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) {
bool mapped = false;
bool local = strstr(argv[0], "-") != NULL;
enum VisMode mode = str2vismode(argv[1]);
enum VisMode mode = vis_mode_from(vis, argv[1]);

if (local && !win)
return false;
Expand Down Expand Up @@ -820,7 +803,7 @@ static bool cmd_map(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor

static bool cmd_unmap(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) {
bool local = strstr(argv[0], "-") != NULL;
enum VisMode mode = str2vismode(argv[1]);
enum VisMode mode = vis_mode_from(vis, argv[1]);
const char *lhs = argv[2];

if (local && !win)
Expand Down
12 changes: 11 additions & 1 deletion vis-modes.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <string.h>
#include <strings.h>
#include "vis-core.h"
#include "util.h"

Expand Down Expand Up @@ -86,6 +87,15 @@ void vis_mode_switch(Vis *vis, enum VisMode mode) {
mode_set(vis, &vis_modes[mode]);
}

enum VisMode vis_mode_from(Vis *vis, const char *name) {
for (size_t i = 0; i < LENGTH(vis_modes); i++) {
Mode *mode = &vis_modes[i];
if (!strcasecmp(mode->name, name))
return mode->id;
}
return VIS_MODE_INVALID;
}

enum VisMode vis_mode_get(Vis *vis) {
return vis->mode->id;
}
Expand Down Expand Up @@ -241,7 +251,7 @@ Mode vis_modes[] = {
},
[VIS_MODE_VISUAL_LINE] = {
.id = VIS_MODE_VISUAL_LINE,
.name = "VISUAL LINE",
.name = "VISUAL-LINE",
.parent = &vis_modes[VIS_MODE_VISUAL],
.status = "VISUAL-LINE",
.help = "",
Expand Down
1 change: 1 addition & 0 deletions vis.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ enum VisMode {

void vis_mode_switch(Vis*, enum VisMode);
enum VisMode vis_mode_get(Vis*);
enum VisMode vis_mode_from(Vis*, const char *name);
/* In the specified mode: map a given key to a binding (binding->key is ignored).
* Fails if a prefix of `key' is already mapped and `force' is false. Otherwise
* all such prefixes are unmapped. */
Expand Down

0 comments on commit 6d2d23a

Please sign in to comment.