diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-07-10 17:27:04 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-07-10 18:26:05 +0200 |
| commit | d4bba6e46fa1ab67947508c95a4198dbcf060489 (patch) | |
| tree | 070f4d37fe37433ce68bf7aa77ba23bc475563c5 /vis.c | |
| parent | 6e0532af78294c76d0e0a187a40d330518bab0a8 (diff) | |
| download | vis-d4bba6e46fa1ab67947508c95a4198dbcf060489.tar.gz vis-d4bba6e46fa1ab67947508c95a4198dbcf060489.tar.xz | |
vis: implement jump list in terms of marks
Diffstat (limited to 'vis.c')
| -rw-r--r-- | vis.c | 27 |
1 files changed, 7 insertions, 20 deletions
@@ -136,7 +136,7 @@ static File *file_new_text(Vis *vis, Text *text) { file->text = text; file->stat = text_stat(text); for (size_t i = 0; i < LENGTH(file->marks); i++) - marks_init(&file->marks[i]); + mark_init(&file->marks[i]); if (vis->files) vis->files->prev = file; file->next = vis->files; @@ -264,7 +264,7 @@ static void window_free(Win *win) { view_free(win->view); for (size_t i = 0; i < LENGTH(win->modes); i++) map_free(win->modes[i].bindings); - ringbuf_free(win->jumplist); + marklist_release(&win->jumplist); mark_release(&win->saved_selections); free(win); } @@ -456,14 +456,14 @@ Win *window_new_file(Vis *vis, File *file, enum UiOption options) { return NULL; win->vis = vis; win->file = file; - win->jumplist = ringbuf_alloc(31); win->view = view_new(file->text); win->ui = vis->ui->window_new(vis->ui, win, options); - if (!win->jumplist || !win->view || !win->ui) { + if (!win->view || !win->ui) { window_free(win); return NULL; } - marks_init(&win->saved_selections); + marklist_init(&win->jumplist, 32); + mark_init(&win->saved_selections); file->refcount++; view_options_set(win->view, view_options_get(win->view)); view_tabwidth_set(win->view, vis->tabwidth); @@ -795,17 +795,6 @@ void vis_keymap_disable(Vis *vis) { vis->keymap_disabled = true; } -static void window_jumplist_add(Win *win, size_t pos) { - Mark mark = text_mark_set(win->file->text, pos); - if (mark && win->jumplist) - ringbuf_add(win->jumplist, (void*)mark); -} - -static void window_jumplist_invalidate(Win *win) { - if (win->jumplist) - ringbuf_invalidate(win->jumplist); -} - void vis_interrupt(Vis *vis) { vis->interrupted = true; } @@ -918,10 +907,6 @@ void vis_do(Vis *vis) { view_cursors_to(sel, pos); if (vis->mode->visual) c.range = view_selections_get(sel); - if (a->movement->type & JUMP) - window_jumplist_add(win, pos); - else - window_jumplist_invalidate(win); } else if (a->movement->type & INCLUSIVE && c.range.end > start) { c.range.end = text_char_next(txt, c.range.end); } else if (linewise && (a->movement->type & LINEWISE_INCLUSIVE)) { @@ -989,6 +974,8 @@ void vis_do(Vis *vis) { } view_selections_normalize(view); + if (a->movement && (a->movement->type & JUMP)) + vis_jumplist_save(vis); if (a->op) { |
