From 8324196fedbe006841398a1621fcbf8e8450d4fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Tue, 28 Jul 2015 17:23:06 +0200 Subject: vis: fix join operator Only skip last line break if range comes from linewise visual mode. --- vis.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index dc30bda..48599b3 100644 --- a/vis.c +++ b/vis.c @@ -600,12 +600,15 @@ static size_t op_cursor(OperatorContext *c) { static size_t op_join(OperatorContext *c) { Text *txt = vis->win->file->text; size_t pos = text_line_begin(txt, c->range.end), prev_pos; - /* if selection is linewise, skip last line break */ - if (text_range_is_linewise(txt, &c->range)) { - size_t line_prev = text_line_prev(txt, pos); - size_t line_prev_prev = text_line_prev(txt, line_prev); - if (line_prev_prev >= c->range.start) - pos = line_prev; + if (c->cursor) { + /* if selection is from visual linewiese mode, skip last line break */ + Filerange sel = view_cursors_selection_get(c->cursor); + if (text_range_equal(&sel, &c->range) && text_range_is_linewise(txt, &sel)) { + size_t line_prev = text_line_prev(txt, pos); + size_t line_prev_prev = text_line_prev(txt, line_prev); + if (line_prev_prev >= sel.start) + pos = line_prev; + } } do { -- cgit v1.2.3