aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--text-motions.c23
-rw-r--r--text-motions.h3
2 files changed, 26 insertions, 0 deletions
diff --git a/text-motions.c b/text-motions.c
index 4dd7b89..16137aa 100644
--- 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
index e5f76bd..a51fd08 100644
--- 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);