diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-10-09 09:22:11 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-10-09 09:31:19 +0200 |
| commit | b0c9b0063d0b9ed9a7f93c69779749130b353ff1 (patch) | |
| tree | bc2458a96e031e100ff7143e4f68383d0c126624 /vis-operators.c | |
| parent | e5dd33175fc7eb69ebc4ad63e94e483ad881008e (diff) | |
| download | vis-b0c9b0063d0b9ed9a7f93c69779749130b353ff1.tar.gz vis-b0c9b0063d0b9ed9a7f93c69779749130b353ff1.tar.xz | |
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
Diffstat (limited to 'vis-operators.c')
| -rw-r--r-- | vis-operators.c | 9 |
1 files changed, 8 insertions, 1 deletions
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); |
