From 66f5700d201c9456f917507db77a88115f38961c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 9 Jul 2015 10:12:25 +0200 Subject: vis: improve handling of linewise deletion at end of file dd on the last line now moves the cursor to the start of the preceding line. --- vis.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index 8cab79a..ee6612b 100644 --- a/vis.c +++ b/vis.c @@ -447,13 +447,16 @@ static size_t op_delete(OperatorContext *c) { c->reg->linewise = c->linewise; register_put(c->reg, txt, &c->range); text_delete(txt, c->range.start, len); - return c->range.start; + size_t pos = c->range.start; + if (c->linewise && pos == text_size(txt)) + pos = text_line_begin(txt, text_line_prev(txt, pos)); + return pos; } static size_t op_change(OperatorContext *c) { - size_t pos = op_delete(c); + op_delete(c); switchmode(&(const Arg){ .i = VIS_MODE_INSERT }); - return pos; + return c->range.start; } static size_t op_yank(OperatorContext *c) { -- cgit v1.2.3