aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c25
-rw-r--r--vis.c10
-rw-r--r--vis.h1
3 files changed, 17 insertions, 19 deletions
diff --git a/main.c b/main.c
index 78a44c1..b055761 100644
--- a/main.c
+++ b/main.c
@@ -1755,31 +1755,18 @@ static const char *reg(Vis *vis, const char *keys, const Arg *arg) {
return keys;
}
-static const char *key2mark(Vis *vis, const char *keys, int *mark) {
- *mark = VIS_MARK_INVALID;
+static const char *mark_set(Vis *vis, const char *keys, const Arg *arg) {
if (!keys[0])
return NULL;
- if (keys[0] >= 'a' && keys[0] <= 'z')
- *mark = keys[0] - 'a';
- else if (keys[0] == '<')
- *mark = VIS_MARK_SELECTION_START;
- else if (keys[0] == '>')
- *mark = VIS_MARK_SELECTION_END;
+ vis_mark_set(vis, vis_mark_from(vis, keys[0]), view_cursor_get(vis_view(vis)));
return keys+1;
}
-static const char *mark_set(Vis *vis, const char *keys, const Arg *arg) {
- int mark;
- keys = key2mark(vis, keys, &mark);
- vis_mark_set(vis, mark, view_cursor_get(vis_view(vis)));
- return keys;
-}
-
static const char *mark_motion(Vis *vis, const char *keys, const Arg *arg) {
- int mark;
- keys = key2mark(vis, keys, &mark);
- vis_motion(vis, arg->i, mark);
- return keys;
+ if (!keys[0])
+ return NULL;
+ vis_motion(vis, arg->i, vis_mark_from(vis, keys[0]));
+ return keys+1;
}
static const char *undo(Vis *vis, const char *keys, const Arg *arg) {
diff --git a/vis.c b/vis.c
index c8a102b..cf69a51 100644
--- a/vis.c
+++ b/vis.c
@@ -1199,6 +1199,16 @@ void vis_repeat(Vis *vis) {
vis_cancel(vis);
}
+enum VisMark vis_mark_from(Vis *vis, char mark) {
+ if (mark >= 'a' && mark <= 'z')
+ return VIS_MARK_a + mark - 'a';
+ else if (mark == '<')
+ return VIS_MARK_SELECTION_START;
+ else if (mark == '>')
+ return VIS_MARK_SELECTION_END;
+ return VIS_MARK_INVALID;
+}
+
void vis_mark_set(Vis *vis, enum VisMark mark, size_t pos) {
File *file = vis->win->file;
if (mark < LENGTH(file->marks))
diff --git a/vis.h b/vis.h
index 75c3fe0..1cf9725 100644
--- a/vis.h
+++ b/vis.h
@@ -381,6 +381,7 @@ enum VisMark {
VIS_MARK_INVALID, /* has to be the last enum member */
};
+enum VisMark vis_mark_from(Vis*, char mark);
void vis_mark_set(Vis*, enum VisMark mark, size_t pos);
enum VisRegister {