From 706c9e5131a6937ea5cf4ff0d0548097a243c223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Fri, 23 Oct 2015 12:50:42 +0200 Subject: vis: introduce vis_mode_switch API --- config.def.h | 2 +- vis.c | 33 +++++++++++++++++++-------------- vis.h | 2 ++ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/config.def.h b/config.def.h index c1ba0af..c3a6c4c 100644 --- a/config.def.h +++ b/config.def.h @@ -1120,7 +1120,7 @@ static void vis_mode_operator_leave(Vis *vis, Mode *new) { static void vis_mode_operator_input(Vis *vis, const char *str, size_t len) { /* invalid operator */ action_reset(vis, &vis->action); - switchmode_to(vis, vis->mode_prev); + vis_mode_set(vis, vis->mode_prev); } static KeyBinding vis_operator_options[] = { diff --git a/vis.c b/vis.c index 9ede18e..b1673cc 100644 --- a/vis.c +++ b/vis.c @@ -442,7 +442,7 @@ static bool cmd_earlier_later(Vis*, Filerange*, enum CmdOpt, const char *argv[]) static bool cmd_help(Vis*, Filerange*, enum CmdOpt, const char *argv[]); static void action_reset(Vis*, Action *a); -static void switchmode_to(Vis*, Mode *new_mode); +static void vis_mode_set(Vis*, Mode *new_mode); static bool vis_window_new(Vis*, const char *file); static bool vis_window_split(Win *win); @@ -922,7 +922,8 @@ static const char *cursors_select(Vis *vis, const char *keys, const Arg *arg) { view_cursors_to(cursor, text_char_prev(txt, word.end)); } } - return switchmode(vis, keys, &(const Arg){ .i = VIS_MODE_VISUAL }); + vis_mode_switch(vis, VIS_MODE_VISUAL); + return keys; } static const char *cursors_select_next(Vis *vis, const char *keys, const Arg *arg) { @@ -1056,7 +1057,7 @@ static const char *selection_end(Vis *vis, const char *keys, const Arg *arg) { static const char *selection_restore(Vis *vis, const char *keys, const Arg *arg) { for (Cursor *c = view_cursors(vis->win->view); c; c = view_cursors_next(c)) view_cursors_selection_restore(c); - switchmode(vis, keys, &(const Arg){ .i = VIS_MODE_VISUAL }); + vis_mode_switch(vis, VIS_MODE_VISUAL); return keys; } @@ -1181,13 +1182,13 @@ static const char *insert_register(Vis *vis, const char *keys, const Arg *arg) { static const char *prompt_search(Vis *vis, const char *keys, const Arg *arg) { editor_prompt_show(vis, arg->s, ""); - switchmode(vis, keys, &(const Arg){ .i = VIS_MODE_PROMPT }); + vis_mode_switch(vis, VIS_MODE_PROMPT); return keys; } static const char *prompt_cmd(Vis *vis, const char *keys, const Arg *arg) { editor_prompt_show(vis, ":", arg->s); - switchmode(vis, keys, &(const Arg){ .i = VIS_MODE_PROMPT }); + vis_mode_switch(vis, VIS_MODE_PROMPT); return keys; } @@ -1198,9 +1199,9 @@ static const char *prompt_enter(Vis *vis, const char *keys, const Arg *arg) { * focused editor window *before* anything is executed which depends * on vis->win. */ - switchmode_to(vis, vis->mode_before_prompt); + vis_mode_set(vis, vis->mode_before_prompt); if (s && *s && exec_command(vis, vis->prompt_type, s) && vis->running) - switchmode(vis, keys, &(const Arg){ .i = VIS_MODE_NORMAL }); + vis_mode_switch(vis, VIS_MODE_NORMAL); free(s); editor_draw(vis); return keys; @@ -1397,7 +1398,7 @@ static const char *openline(Vis *vis, const char *keys, const Arg *arg) { insert_newline(vis, keys, NULL); movement(vis, keys, &(const Arg){ .i = MOVE_LINE_PREV }); } - switchmode(vis, keys, &(const Arg){ .i = VIS_MODE_INSERT }); + vis_mode_switch(vis, VIS_MODE_INSERT); return keys; } @@ -1410,7 +1411,7 @@ static const char *join(Vis *vis, const char *keys, const Arg *arg) { } static const char *switchmode(Vis *vis, const char *keys, const Arg *arg) { - switchmode_to(vis, &vis_modes[arg->i]); + vis_mode_switch(vis, arg->i); return keys; } @@ -1527,11 +1528,11 @@ static void action_do(Vis *vis, Action *a) { if (a->op) { if (a->op == &ops[OP_CHANGE]) - switchmode(vis, NULL, &(const Arg){ .i = VIS_MODE_INSERT }); + vis_mode_switch(vis, VIS_MODE_INSERT); else if (vis->mode == &vis_modes[VIS_MODE_OPERATOR]) - switchmode_to(vis, vis->mode_prev); + vis_mode_set(vis, vis->mode_prev); else if (vis->mode->visual) - switchmode(vis, NULL, &(const Arg){ .i = VIS_MODE_NORMAL }); + vis_mode_switch(vis, VIS_MODE_NORMAL); text_snapshot(txt); editor_draw(vis); } @@ -1552,7 +1553,7 @@ static void action_reset(Vis *vis, Action *a) { a->reg = NULL; } -static void switchmode_to(Vis *vis, Mode *new_mode) { +static void vis_mode_set(Vis *vis, Mode *new_mode) { if (vis->mode == new_mode) return; if (vis->mode->leave) @@ -2843,7 +2844,7 @@ void vis_operator(Vis *vis, enum VisOperator opi) { } /* switch to operator mode inorder to make operator options and * text-object available */ - switchmode(vis, NULL, &(const Arg){ .i = VIS_MODE_OPERATOR }); + vis_mode_switch(vis, VIS_MODE_OPERATOR); if (vis->action.op == op) { /* hacky way to handle double operators i.e. things like * dd, yy etc where the second char isn't a movement */ @@ -2854,3 +2855,7 @@ void vis_operator(Vis *vis, enum VisOperator opi) { vis->action.op = op; } } + +void vis_mode_switch(Vis *vis, enum VisMode mode) { + vis_mode_set(vis, &vis_modes[mode]); +} diff --git a/vis.h b/vis.h index 03686a3..c462ac2 100644 --- a/vis.h +++ b/vis.h @@ -28,6 +28,8 @@ enum VisMode { VIS_MODE_LAST, }; +void vis_mode_switch(Vis*, enum VisMode); + enum VisOperator { OP_DELETE, OP_CHANGE, -- cgit v1.2.3