vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 92c2eeffb963bf0ba4adfdabdcf3809fa19e062b
parent c3edece34354ca4fa0820405c69a52dce6fbdaca
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sat, 24 Feb 2018 19:05:10 +0100

text-motion: implement text_line_blank_{prev,next}

Diffstat:
Mtext-motions.c | 23+++++++++++++++++++++++
Mtext-motions.h | 3+++
2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/text-motions.c b/text-motions.c @@ -481,6 +481,29 @@ size_t text_line_empty_prev(Text *txt, size_t pos) { return it.pos; } +size_t text_line_blank_next(Text *txt, size_t pos) { + char c; + Iterator it = text_iterator_get(txt, pos); + while (text_iterator_byte_find_next(&it, '\n')) { + size_t n = it.pos; + while (text_iterator_byte_next(&it, &c) && blank(c)); + if (c == '\n') + return n + 1; + } + return it.pos; +} + +size_t text_line_blank_prev(Text *txt, size_t pos) { + char c; + Iterator it = text_iterator_get(txt, pos); + while (text_iterator_byte_find_prev(&it, '\n')) { + while (text_iterator_byte_prev(&it, &c) && blank(c)); + if (c == '\n') + return it.pos + 1; + } + return it.pos; +} + size_t text_block_start(Text *txt, size_t pos) { Filerange r = text_object_curly_bracket(txt, pos-1); return text_range_valid(&r) ? r.start-1 : pos; diff --git a/text-motions.h b/text-motions.h @@ -55,6 +55,9 @@ size_t text_line_char_prev(Text*, size_t pos); /* move to the next/previous empty line */ size_t text_line_empty_next(Text*, size_t pos); size_t text_line_empty_prev(Text*, size_t pos); +/* move to start of next/previous blank line */ +size_t text_line_blank_next(Text*, size_t pos); +size_t text_line_blank_prev(Text*, size_t pos); /* move to same offset in previous/next line */ size_t text_line_up(Text*, size_t pos); size_t text_line_down(Text*, size_t pos);