aboutsummaryrefslogtreecommitdiff
path: root/vis-marks.c
diff options
context:
space:
mode:
Diffstat (limited to 'vis-marks.c')
-rw-r--r--vis-marks.c15
1 files changed, 7 insertions, 8 deletions
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") },
};