vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit f7e195309b07f9a725ac7b65c22c32059aa8738b parent 16ced6b36837cc61602dc4e439a990d942a6734d Author: Marc André Tanner <mat@brain-dump.org> Date: Tue, 17 Nov 2015 22:43:21 +0100 vis: put in visual mode should replace the current selection There are some combinations (e.g. line wise selection / character wise register content) which should probably be improved further. Also since vis currently neither supports the numbered registers "0 - "9 nor the small delete register "- the deleted text is not stored in any register. Notice that we can't call op_delete in the implementation because it would overwrite the register content we want to paste. Closes #113 Diffstat:
| M | vis-operators.c | | | 10 | ++++++++-- |
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/vis-operators.c b/vis-operators.c @@ -30,12 +30,18 @@ static size_t op_yank(Vis *vis, Text *txt, OperatorContext *c) { static size_t op_put(Vis *vis, Text *txt, OperatorContext *c) { size_t pos = c->pos; + bool sel = text_range_size(&c->range) > 0; + bool sel_linewise = sel && text_range_is_linewise(txt, &c->range); + if (sel) { + text_delete_range(txt, &c->range); + pos = c->pos = c->range.start; + } switch (c->arg->i) { case VIS_OP_PUT_AFTER: case VIS_OP_PUT_AFTER_END: - if (c->reg->linewise) + if (c->reg->linewise && !sel_linewise) pos = text_line_next(txt, pos); - else + else if (!sel) pos = text_char_next(txt, pos); break; case VIS_OP_PUT_BEFORE: