aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-10-09 09:22:11 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-10-09 09:31:19 +0200
commitb0c9b0063d0b9ed9a7f93c69779749130b353ff1 (patch)
treebc2458a96e031e100ff7143e4f68383d0c126624
parente5dd33175fc7eb69ebc4ad63e94e483ad881008e (diff)
downloadvis-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
-rw-r--r--vis-operators.c9
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);