diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2020-01-24 11:14:57 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2020-01-24 11:30:11 +0100 |
| commit | 33ecbde6688ef887fa9ab4d2bddad9a021adff3b (patch) | |
| tree | 8111df616ce537473b6ffbbb6f1983fd8b767163 | |
| parent | b416a912c7be9718934778f66317e974fd4aa0a3 (diff) | |
| download | vis-33ecbde6688ef887fa9ab4d2bddad9a021adff3b.tar.gz vis-33ecbde6688ef887fa9ab4d2bddad9a021adff3b.tar.xz | |
sam: fix ^ anchor behavior in looping commands
Previsouly a command like:
x/^.*\n/
would only select every second line.
Fixes #774
| -rw-r--r-- | sam.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -1385,9 +1385,13 @@ static int extract(Vis *vis, Win *win, Command *cmd, const char *argv[], Selecti RegexMatch match[nsub]; while (start < end || trailing_match) { trailing_match = false; - bool found = text_search_range_forward(txt, start, - end - start, cmd->regex, nsub, match, - start > range->start ? REG_NOTBOL : 0) == 0; + char c; + int flags = start > range->start && + text_byte_get(txt, start - 1, &c) && c != '\n' ? + REG_NOTBOL : 0; + bool found = !text_search_range_forward(txt, start, end - start, + cmd->regex, nsub, match, + flags); Filerange r = text_range_empty(); if (found) { if (argv[0][0] == 'x') |
