aboutsummaryrefslogtreecommitdiff
path: root/vis-operators.c
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 /vis-operators.c
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
Diffstat (limited to 'vis-operators.c')
-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);