From b0c9b0063d0b9ed9a7f93c69779749130b353ff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sun, 9 Oct 2016 09:22:11 +0200 Subject: vis: fix join operator to work on lines ending with white spaces Extend the operator range to cover white spaces to the left of the cursor position on the same line. Close #400 --- vis-operators.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'vis-operators.c') diff --git a/vis-operators.c b/vis-operators.c index b7b2335..c96ebbb 100644 --- a/vis-operators.c +++ b/vis-operators.c @@ -191,6 +191,10 @@ static size_t op_join(Vis *vis, Text *txt, OperatorContext *c) { size_t line_prev_prev = text_line_prev(txt, line_prev); if (line_prev_prev >= c->range.start) pos = line_prev; + } else { + size_t start = text_line_finish(txt, c->range.start); + if (start < c->range.start) + c->range.start = start; } size_t len = c->arg->s ? strlen(c->arg->s) : 0; @@ -198,7 +202,10 @@ static size_t op_join(Vis *vis, Text *txt, OperatorContext *c) { do { prev_pos = pos; size_t end = text_line_start(txt, pos); - pos = text_char_next(txt, text_line_finish(txt, text_line_prev(txt, end))); + size_t prev = text_line_prev(txt, end); + pos = text_line_finish(txt, prev); + if (pos != prev) + pos = text_char_next(txt, pos); if (pos >= c->range.start && end > pos) { text_delete(txt, pos, end - pos); text_insert(txt, pos, c->arg->s, len); -- cgit v1.2.3