vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 1d1629740b194138481a5fdab6d8a450119badc0 parent d9cd78ebbc5cd96247f85377c444e10886a756c5 Author: Marc André Tanner <mat@brain-dump.org> Date: Tue, 13 Jun 2017 14:30:56 +0200 view: do not automatically anchor selections when setting range Diffstat:
| M | main.c | | | 2 | ++ |
| M | view.c | | | 1 | - |
| M | vis-lua.c | | | 6 | ++++-- |
| M | vis.c | | | 4 | +++- |
4 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/main.c b/main.c @@ -1380,6 +1380,7 @@ static const char *cursors_select_next(Vis *vis, const char *keys, const Arg *ar size_t pos = text_char_prev(txt, word.end); if ((s = view_selections_new(view, pos))) { view_selections_set(s, &word); + view_selections_anchor(s); view_selections_primary_set(s); goto out; } @@ -1392,6 +1393,7 @@ static const char *cursors_select_next(Vis *vis, const char *keys, const Arg *ar size_t pos = text_char_prev(txt, word.end); if ((s = view_selections_new(view, pos))) { view_selections_set(s, &word); + view_selections_anchor(s); view_selections_primary_set(s); } diff --git a/view.c b/view.c @@ -1227,7 +1227,6 @@ void view_selections_set(Selection *s, const Filerange *r) { s->anchor = text_mark_set(txt, r->start); s->cursor = text_mark_set(txt, end); } - s->anchored = true; view_cursors_to(s, text_mark_get(s->view->text, s->cursor)); } diff --git a/vis-lua.c b/vis-lua.c @@ -1887,10 +1887,12 @@ static int window_cursor_newindex(lua_State *L) { if (strcmp(key, "selection") == 0) { Filerange range = getrange(L, 3); - if (text_range_valid(&range)) + if (text_range_valid(&range)) { view_selections_set(sel, &range); - else + view_selections_anchor(sel); + } else { view_selection_clear(sel); + } return 0; } } diff --git a/vis.c b/vis.c @@ -971,8 +971,10 @@ void vis_do(Vis *vis) { if (linewise && vis->mode != &vis_modes[VIS_MODE_VISUAL]) c.range = text_range_linewise(txt, &c.range); - if (vis->mode->visual) + if (vis->mode->visual) { view_selections_set(sel, &c.range); + view_selections_anchor(sel); + } if (a->op) { size_t pos = a->op->func(vis, txt, &c);