vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 8299bb8f6e5bc69ccbd30f4da0e63c615f2f295a
parent e6c860d0af6fe0750d83ab40e227242d21ff5511
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Tue, 28 Jul 2015 17:00:20 +0200

text-object: introduce utility function text_range_is_linewise

Diffstat:
Mtext-objects.c | 6++++++
Mtext-objects.h | 2++
Mvis.c | 2+-
3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/text-objects.c b/text-objects.c @@ -304,3 +304,9 @@ Filerange text_range_linewise(Text *txt, Filerange *rin) { rout.end = text_line_next(txt, rin->end); return rout; } + +bool text_range_is_linewise(Text *txt, Filerange *r) { + return text_range_valid(r) && + r->start == text_line_begin(txt, r->start) && + r->end == text_line_begin(txt, r->end); +} diff --git a/text-objects.h b/text-objects.h @@ -37,5 +37,7 @@ Filerange text_object_backtick(Text*, size_t pos); /* extend a range to cover whole lines */ Filerange text_range_linewise(Text*, Filerange*); +/* test whether a given range covers whole lines */ +bool text_range_is_linewise(Text*, Filerange*); #endif diff --git a/vis.c b/vis.c @@ -601,7 +601,7 @@ 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 (c->range.start == text_line_begin(txt, c->range.start) && pos == c->range.end) { + 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)