diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2017-06-15 13:35:00 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2017-06-15 15:51:43 +0200 |
| commit | 898dcf0e49bb7da186052b249a1366273d102095 (patch) | |
| tree | 8fdb3e07332157849259348232e9ba4327eee665 | |
| parent | c5082c9bcb9ab08fcb90b895ec59a90a9c86e5d9 (diff) | |
| download | vis-898dcf0e49bb7da186052b249a1366273d102095.tar.gz vis-898dcf0e49bb7da186052b249a1366273d102095.tar.xz | |
vis: implement pairwise selection combinator: leftmost
| -rw-r--r-- | main.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -92,6 +92,7 @@ static Filerange combine_union(const Filerange*, const Filerange*); static Filerange combine_intersect(const Filerange*, const Filerange*); static Filerange combine_longer(const Filerange*, const Filerange*); static Filerange combine_shorter(const Filerange*, const Filerange*); +static Filerange combine_leftmost(const Filerange*, const Filerange*); /* adjust current used count according to keys */ static const char *count(Vis*, const char *keys, const Arg *arg); /* move to the count-th line or if not given either to the first (arg->i < 0) @@ -304,6 +305,7 @@ enum { VIS_ACTION_SELECTIONS_COMBINE_INTERSECT, VIS_ACTION_SELECTIONS_COMBINE_LONGER, VIS_ACTION_SELECTIONS_COMBINE_SHORTER, + VIS_ACTION_SELECTIONS_COMBINE_LEFTMOST, VIS_ACTION_TEXT_OBJECT_WORD_OUTER, VIS_ACTION_TEXT_OBJECT_WORD_INNER, VIS_ACTION_TEXT_OBJECT_LONGWORD_OUTER, @@ -1114,6 +1116,11 @@ static const KeyAction vis_action[] = { VIS_HELP("Pairwise combine: take shorter") selections_combine, { .combine = combine_shorter } }, + [VIS_ACTION_SELECTIONS_COMBINE_LEFTMOST] = { + "vis-selections-combine-leftmost", + VIS_HELP("Pairwise combine: leftmost") + selections_combine, { .combine = combine_leftmost } + }, [VIS_ACTION_TEXT_OBJECT_WORD_OUTER] = { "vis-textobject-word-outer", VIS_HELP("A word leading and trailing whitespace included") @@ -1853,6 +1860,14 @@ static Filerange combine_shorter(const Filerange *r1, const Filerange *r2) { return l1 < l2 ? *r1 : *r2; } +static Filerange combine_leftmost(const Filerange *r1, const Filerange *r2) { + if (!r1) + return *r2; + if (!r2) + return *r1; + return r1->start < r2->start || (r1->start == r2->start && r1->end < r2->end) ? *r1 : *r2; +} + static const char *selections_combine(Vis *vis, const char *keys, const Arg *arg) { View *view = vis_view(vis); enum VisRegister reg = vis_register_used(vis); |
