aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2020-01-24 11:14:57 +0100
committerMarc André Tanner <mat@brain-dump.org>2020-01-24 11:30:11 +0100
commit33ecbde6688ef887fa9ab4d2bddad9a021adff3b (patch)
tree8111df616ce537473b6ffbbb6f1983fd8b767163
parentb416a912c7be9718934778f66317e974fd4aa0a3 (diff)
downloadvis-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.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sam.c b/sam.c
index ca0fe5a..b34ccb5 100644
--- a/sam.c
+++ b/sam.c
@@ -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')