diff options
| -rw-r--r-- | text-objects.c | 6 | ||||
| -rw-r--r-- | text-objects.h | 2 | ||||
| -rw-r--r-- | vis.c | 2 |
3 files changed, 9 insertions, 1 deletions
diff --git a/text-objects.c b/text-objects.c index d33132c..0d22ca4 100644 --- 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 index aec84b8..068bafa 100644 --- 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 @@ -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) |
