From f9e2b884c15919757651db8b10c033a344a19e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 10 Jul 2017 18:23:47 +0200 Subject: vis: let '^ mark point to top of jump list --- vis-marks.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'vis-marks.c') diff --git a/vis-marks.c b/vis-marks.c index e04f6b0..7543792 100644 --- a/vis-marks.c +++ b/vis-marks.c @@ -49,7 +49,7 @@ void mark_release(Array *arr) { static Array *mark_from(Vis *vis, enum VisMark id) { if (id == VIS_MARK_SELECTION && vis->win) - return &vis->win->saved_selections; + return array_peek(&vis->win->jumplist.prev); File *file = vis->win->file; if (id < LENGTH(file->marks)) return &file->marks[id]; @@ -105,8 +105,11 @@ void vis_mark_set(Vis *vis, enum VisMark id, Array *sel) { } void marklist_init(MarkList *list, size_t max) { + Array mark; + mark_init(&mark); array_init_sized(&list->prev, sizeof(Array)); array_reserve(&list->prev, max); + array_add(&list->prev, &mark); array_init_sized(&list->next, sizeof(Array)); array_reserve(&list->next, max); } @@ -168,14 +171,10 @@ static bool marklist_prev(Win *win, MarkList *list) { if (restore) goto out; - for (;;) { + while (array_length(&list->prev) > 1) { Array *prev = array_pop(&list->prev); - if (!prev) - goto out; array_push(&list->next, prev); prev = array_peek(&list->prev); - if (!prev) - goto out; Array sel = mark_get(win, prev); restore = array_length(&sel) > 0; if (restore) @@ -226,6 +225,6 @@ enum VisMark vis_mark_from(Vis *vis, char mark) { } const MarkDef vis_marks[] = { - [VIS_MARK_DEFAULT] = { '\'', VIS_HELP("Default mark") }, - [VIS_MARK_SELECTION] = { '^', VIS_HELP("Last selections") }, + [VIS_MARK_DEFAULT] = { '\'', VIS_HELP("Default mark") }, + [VIS_MARK_SELECTION] = { '^', VIS_HELP("Last selections") }, }; -- cgit v1.2.3