aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-07-28 17:23:06 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-07-28 17:23:06 +0200
commit8324196fedbe006841398a1621fcbf8e8450d4fd (patch)
treef511e1e3ab8cff3d66de62f05635a5b23be210ce /vis.c
parent69f3412a8d36b1a4a5da86ae472f7e345741b2fd (diff)
downloadvis-8324196fedbe006841398a1621fcbf8e8450d4fd.tar.gz
vis-8324196fedbe006841398a1621fcbf8e8450d4fd.tar.xz
vis: fix join operator
Only skip last line break if range comes from linewise visual mode.
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c15
1 files changed, 9 insertions, 6 deletions
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 {