From 1c1bf5b321f57dd6df728b483a848c6000c9ddb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 4 Apr 2016 12:51:44 +0200 Subject: 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. --- sam.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/sam.c b/sam.c index 4077509..143c506 100644 --- a/sam.c +++ b/sam.c @@ -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; } -- cgit v1.2.3