diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-04-04 12:51:44 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-04-04 13:01:27 +0200 |
| commit | 1c1bf5b321f57dd6df728b483a848c6000c9ddb0 (patch) | |
| tree | f92bcf2833bf8f08af2daea81f2e103385811ea0 | |
| parent | 371c50e7c4a760448545e30705df92be2a88103a (diff) | |
| download | vis-1c1bf5b321f57dd6df728b483a848c6000c9ddb0.tar.gz vis-1c1bf5b321f57dd6df728b483a848c6000c9ddb0.tar.xz | |
sam: fix x command with default pattern
The end range should still be respected, previously it would continue
looping for all lines until the end of file.
| -rw-r--r-- | sam.c | 23 |
1 files changed, 15 insertions, 8 deletions
@@ -873,16 +873,23 @@ static bool cmd_extract(Vis *vis, Win *win, Command *cmd, const char *argv[], Cu } } } else { - size_t start = range->start; - for (;;) { - size_t end = text_line_next(txt, start); - Filerange line = text_range_new(start, end); - if (start == end || !text_range_valid(&line)) + size_t start = range->start, end = range->end; + while (start < end) { + size_t next = text_line_next(txt, start); + if (next > end) + next = end; + Filerange r = text_range_new(start, next); + if (start == next || !text_range_valid(&r)) break; + start = next; + Mark mark_start = text_mark_set(txt, start); Mark mark_end = text_mark_set(txt, end); - ret &= sam_execute(vis, win, cmd->cmd, NULL, &line); - start = text_mark_get(txt, mark_end); - if (start == EPOS) { + ret &= sam_execute(vis, win, cmd->cmd, NULL, &r); + start = text_mark_get(txt, mark_start); + if (start == EPOS) + start = r.end; + end = text_mark_get(txt, mark_end); + if (end == EPOS) { ret = false; break; } |
