vis

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

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

commit 7f3e9c6eed283d9218b7e746563d6ba28c6367cd
parent 004762add75fe76d572aa76e4820d1d20c918135
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sat,  7 Nov 2015 08:45:15 +0100

vis: introduce vis_cancel API

Diffstat:
Mvis-core.h | 2+-
Mvis-modes.c | 6+++---
Mvis.c | 12++++++++----
Mvis.h | 1+
4 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/vis-core.h b/vis-core.h @@ -167,7 +167,7 @@ const char *expandtab(Vis *vis); void macro_operator_stop(Vis *vis); void macro_operator_record(Vis *vis); -void action_reset(Vis*, Action *a); +void action_reset(Action*); void mode_set(Vis *vis, Mode *new_mode); Mode *mode_get(Vis *vis, enum VisMode mode); diff --git a/vis-modes.c b/vis-modes.c @@ -58,7 +58,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); + vis_cancel(vis); mode_set(vis, vis->mode_prev); } @@ -112,7 +112,7 @@ static void vis_mode_prompt_leave(Vis *vis, Mode *new) { static void vis_mode_insert_enter(Vis *vis, Mode *old) { if (!vis->macro_operator) { macro_operator_record(vis); - action_reset(vis, &vis->action_prev); + action_reset(&vis->action_prev); vis->action_prev.macro = vis->macro_operator; vis->action_prev.op = &ops[OP_INSERT]; } @@ -136,7 +136,7 @@ static void vis_mode_insert_input(Vis *vis, const char *str, size_t len) { static void vis_mode_replace_enter(Vis *vis, Mode *old) { if (!vis->macro_operator) { macro_operator_record(vis); - action_reset(vis, &vis->action_prev); + action_reset(&vis->action_prev); vis->action_prev.macro = vis->macro_operator; vis->action_prev.op = &ops[OP_REPLACE]; } diff --git a/vis.c b/vis.c @@ -660,11 +660,15 @@ static void action_do(Vis *vis, Action *a) { a->macro = vis->macro_operator; vis->action_prev = *a; } - action_reset(vis, a); + action_reset(a); } } -void action_reset(Vis *vis, Action *a) { +void vis_cancel(Vis *vis) { + action_reset(&vis->action); +} + +void action_reset(Action *a) { memset(a, 0, sizeof(*a)); } @@ -1034,7 +1038,7 @@ bool vis_motion(Vis *vis, enum VisMotion motion, ...) { { const char *pattern = va_arg(ap, char*); if (text_regex_compile(vis->search_pattern, pattern, REG_EXTENDED)) { - action_reset(vis, &vis->action); + vis_cancel(vis); goto err; } if (motion == MOVE_SEARCH_FORWARD) @@ -1199,7 +1203,7 @@ void vis_repeat(Vis *vis) { } vis->action_prev = action_prev; } - action_reset(vis, &vis->action); + vis_cancel(vis); } void vis_mark_set(Vis *vis, enum VisMark mark, size_t pos) { diff --git a/vis.h b/vis.h @@ -320,6 +320,7 @@ void vis_register_set(Vis*, enum VisRegister); Register *vis_register_get(Vis*, enum VisRegister); void vis_repeat(Vis*); +void vis_cancel(Vis*); /* execute a :-command (call without without leading ':') */ bool vis_cmd(Vis*, const char *cmd);