aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-09-15 16:31:31 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-10-05 15:57:14 +0200
commitd7b3fd62d0be7b860b9213380f303afb29046008 (patch)
tree60e8d67e2985ba711877df406b8386ff8554f904
parentd9bc41389e754389fadca0e2ef2f1a578368fc99 (diff)
downloadvis-d7b3fd62d0be7b860b9213380f303afb29046008.tar.gz
vis-d7b3fd62d0be7b860b9213380f303afb29046008.tar.xz
vis: convert mark handling to new input handling code
-rw-r--r--config.def.h122
-rw-r--r--vis.c49
2 files changed, 42 insertions, 129 deletions
diff --git a/config.def.h b/config.def.h
index 6532858..6940cae 100644
--- a/config.def.h
+++ b/config.def.h
@@ -12,9 +12,6 @@
*/
enum {
VIS_MODE_BASIC,
- VIS_MODE_MARK,
- VIS_MODE_MARK_LINE,
- VIS_MODE_MARK_SET,
VIS_MODE_MOVE,
VIS_MODE_TEXTOBJ,
VIS_MODE_INNER_TEXTOBJ,
@@ -140,6 +137,8 @@ static KeyBinding vis_movements[] = {
{ "," , totill_reverse,{ NULL } },
{ "/" , prompt_search,{ .s = "/" } },
{ "?" , prompt_search,{ .s = "?" } },
+ { "`" , mark, { NULL } },
+ { "'" , mark_line, { NULL } },
{ /* empty last element, array terminator */ },
};
@@ -239,100 +238,6 @@ static KeyBinding vis_operator_options[] = {
{ /* empty last element, array terminator */ },
};
-static KeyBinding vis_marks[] = {
- { "`a'", mark, { .i = MARK_a } },
- { "`b'", mark, { .i = MARK_b } },
- { "`c'", mark, { .i = MARK_c } },
- { "`d'", mark, { .i = MARK_d } },
- { "`e'", mark, { .i = MARK_e } },
- { "`f'", mark, { .i = MARK_f } },
- { "`g'", mark, { .i = MARK_g } },
- { "`h'", mark, { .i = MARK_h } },
- { "`i'", mark, { .i = MARK_i } },
- { "`j'", mark, { .i = MARK_j } },
- { "`k'", mark, { .i = MARK_k } },
- { "`l'", mark, { .i = MARK_l } },
- { "`m'", mark, { .i = MARK_m } },
- { "`n'", mark, { .i = MARK_n } },
- { "`o'", mark, { .i = MARK_o } },
- { "`p'", mark, { .i = MARK_p } },
- { "`q'", mark, { .i = MARK_q } },
- { "`r'", mark, { .i = MARK_r } },
- { "`s'", mark, { .i = MARK_s } },
- { "`t'", mark, { .i = MARK_t } },
- { "`u'", mark, { .i = MARK_u } },
- { "`v'", mark, { .i = MARK_v } },
- { "`w'", mark, { .i = MARK_w } },
- { "`x'", mark, { .i = MARK_x } },
- { "`y'", mark, { .i = MARK_y } },
- { "`z'", mark, { .i = MARK_z } },
- { "`<'", mark, { .i = MARK_SELECTION_START } },
- { "`>'", mark, { .i = MARK_SELECTION_END } },
- { /* empty last element, array terminator */ },
-};
-
-static KeyBinding vis_marks_line[] = {
- { "'a", mark_line, { .i = MARK_a } },
- { "'b", mark_line, { .i = MARK_b } },
- { "'c", mark_line, { .i = MARK_c } },
- { "'d", mark_line, { .i = MARK_d } },
- { "'e", mark_line, { .i = MARK_e } },
- { "'f", mark_line, { .i = MARK_f } },
- { "'g", mark_line, { .i = MARK_g } },
- { "'h", mark_line, { .i = MARK_h } },
- { "'i", mark_line, { .i = MARK_i } },
- { "'j", mark_line, { .i = MARK_j } },
- { "'k", mark_line, { .i = MARK_k } },
- { "'l", mark_line, { .i = MARK_l } },
- { "'m", mark_line, { .i = MARK_m } },
- { "'n", mark_line, { .i = MARK_n } },
- { "'o", mark_line, { .i = MARK_o } },
- { "'p", mark_line, { .i = MARK_p } },
- { "'q", mark_line, { .i = MARK_q } },
- { "'r", mark_line, { .i = MARK_r } },
- { "'s", mark_line, { .i = MARK_s } },
- { "'t", mark_line, { .i = MARK_t } },
- { "'u", mark_line, { .i = MARK_u } },
- { "'v", mark_line, { .i = MARK_v } },
- { "'w", mark_line, { .i = MARK_w } },
- { "'x", mark_line, { .i = MARK_x } },
- { "'y", mark_line, { .i = MARK_y } },
- { "'z", mark_line, { .i = MARK_z } },
- { "'<", mark_line, { .i = MARK_SELECTION_START } },
- { "'>", mark_line, { .i = MARK_SELECTION_END } },
- { /* empty last element, array terminator */ },
-};
-
-static KeyBinding vis_marks_set[] = {
- { "ma", mark_set, { .i = MARK_a } },
- { "mb", mark_set, { .i = MARK_b } },
- { "mc", mark_set, { .i = MARK_c } },
- { "md", mark_set, { .i = MARK_d } },
- { "me", mark_set, { .i = MARK_e } },
- { "mf", mark_set, { .i = MARK_f } },
- { "mg", mark_set, { .i = MARK_g } },
- { "mh", mark_set, { .i = MARK_h } },
- { "mi", mark_set, { .i = MARK_i } },
- { "mj", mark_set, { .i = MARK_j } },
- { "mk", mark_set, { .i = MARK_k } },
- { "ml", mark_set, { .i = MARK_l } },
- { "mm", mark_set, { .i = MARK_m } },
- { "mn", mark_set, { .i = MARK_n } },
- { "mo", mark_set, { .i = MARK_o } },
- { "mp", mark_set, { .i = MARK_p } },
- { "mq", mark_set, { .i = MARK_q } },
- { "mr", mark_set, { .i = MARK_r } },
- { "ms", mark_set, { .i = MARK_s } },
- { "mt", mark_set, { .i = MARK_t } },
- { "mu", mark_set, { .i = MARK_u } },
- { "mv", mark_set, { .i = MARK_v } },
- { "mw", mark_set, { .i = MARK_w } },
- { "mx", mark_set, { .i = MARK_x } },
- { "my", mark_set, { .i = MARK_y } },
- { "mz", mark_set, { .i = MARK_z } },
- { /* empty last element, array terminator */ },
-};
-
static KeyBinding vis_mode_normal[] = {
{ "<Escape>", cursors_clear, { } },
{ "<C-k>", cursors_new, { .i = -1 } },
@@ -397,6 +302,7 @@ static KeyBinding vis_mode_normal[] = {
{ "q", macro_record, { NULL } },
{ "@", macro_replay, { NULL } },
{ "gv", selection_restore, { NULL } },
+ { "m", mark_set, { NULL } },
{ /* empty last element, array terminator */ },
};
@@ -613,21 +519,9 @@ static Mode vis_modes[] = {
.parent = NULL,
.default_bindings = basic_movement,
},
- [VIS_MODE_MARK] = {
- .name = "MARK",
- .common_prefix = true,
- .parent = &vis_modes[VIS_MODE_BASIC],
- .default_bindings = vis_marks,
- },
- [VIS_MODE_MARK_LINE] = {
- .name = "MARK-LINE",
- .common_prefix = true,
- .parent = &vis_modes[VIS_MODE_MARK],
- .default_bindings = vis_marks_line,
- },
[VIS_MODE_MOVE] = {
.name = "MOVE",
- .parent = &vis_modes[VIS_MODE_MARK_LINE],
+ .parent = &vis_modes[VIS_MODE_BASIC],
.default_bindings = vis_movements,
},
[VIS_MODE_INNER_TEXTOBJ] = {
@@ -655,16 +549,10 @@ static Mode vis_modes[] = {
.leave = vis_mode_operator_leave,
.input = vis_mode_operator_input,
},
- [VIS_MODE_MARK_SET] = {
- .name = "MARK-SET",
- .common_prefix = true,
- .parent = &vis_modes[VIS_MODE_OPERATOR],
- .default_bindings = vis_marks_set,
- },
[VIS_MODE_NORMAL] = {
.name = "NORMAL",
.isuser = true,
- .parent = &vis_modes[VIS_MODE_MARK_SET],
+ .parent = &vis_modes[VIS_MODE_OPERATOR],
.default_bindings = vis_mode_normal,
},
[VIS_MODE_VISUAL] = {
diff --git a/vis.c b/vis.c
index 6228de0..bbd3f9a 100644
--- a/vis.c
+++ b/vis.c
@@ -725,12 +725,6 @@ static size_t search_backward(Text *txt, size_t pos) {
return text_search_backward(txt, pos, vis->search_pattern);
}
-static const char *mark_set(const char *keys, const Arg *arg) {
- size_t pos = view_cursor_get(vis->win->view);
- vis->win->file->marks[arg->i] = text_mark_set(vis->win->file->text, pos);
- return keys;
-}
-
static size_t mark_goto(File *txt, size_t pos) {
return text_mark_get(txt->text, txt->marks[vis->action.mark]);
}
@@ -1123,17 +1117,48 @@ static const char *reg(const char *keys, const Arg *arg) {
return key2register(keys, &vis->action.reg);
}
+static const char *key2mark(const char *keys, int *mark) {
+ *mark = -1;
+ if (!keys[0])
+ return NULL;
+ if (keys[0] >= 'a' && keys[0] <= 'z')
+ *mark = keys[0] - 'a';
+ else if (keys[0] == '<')
+ *mark = MARK_SELECTION_START;
+ else if (keys[0] == '>')
+ *mark = MARK_SELECTION_END;
+ return keys+1;
+}
+
+static const char *mark_set(const char *keys, const Arg *arg) {
+ int mark;
+ keys = key2mark(keys, &mark);
+ if (mark != -1) {
+ size_t pos = view_cursor_get(vis->win->view);
+ vis->win->file->marks[mark] = text_mark_set(vis->win->file->text, pos);
+ }
+ return keys;
+}
+
static const char *mark(const char *keys, const Arg *arg) {
- vis->action.mark = arg->i;
- vis->action.movement = &moves[MOVE_MARK];
- action_do(&vis->action);
+ int mark;
+ keys = key2mark(keys, &mark);
+ if (mark != -1) {
+ vis->action.mark = mark;
+ vis->action.movement = &moves[MOVE_MARK];
+ action_do(&vis->action);
+ }
return keys;
}
static const char *mark_line(const char *keys, const Arg *arg) {
- vis->action.mark = arg->i;
- vis->action.movement = &moves[MOVE_MARK_LINE];
- action_do(&vis->action);
+ int mark;
+ keys = key2mark(keys, &mark);
+ if (mark != -1) {
+ vis->action.mark = mark;
+ vis->action.movement = &moves[MOVE_MARK_LINE];
+ action_do(&vis->action);
+ }
return keys;
}