diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-12-22 14:36:20 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-12-22 18:11:04 +0100 |
| commit | c6d76158b597d6c9bcfe222129d2897fececc45f (patch) | |
| tree | 6aae2f997b019d51dc8916b8c08007e28d91ef11 | |
| parent | 0f15c4af6c68edb3fa8e3331260e1da43121827f (diff) | |
| download | vis-c6d76158b597d6c9bcfe222129d2897fececc45f.tar.gz vis-c6d76158b597d6c9bcfe222129d2897fececc45f.tar.xz | |
text: introduce EMARK to denote an invalid mark
Technically this macro name is in the reserved namespace of errno.h.
The same is true for EPOS. Maybe we should rename them at some point,
but for now the short names are convenient.
Fix #443
Close #444
| -rw-r--r-- | text.c | 4 | ||||
| -rw-r--r-- | text.h | 4 | ||||
| -rw-r--r-- | vis-operators.c | 4 |
3 files changed, 7 insertions, 5 deletions
@@ -1634,14 +1634,14 @@ Mark text_mark_set(Text *txt, size_t pos) { return (Mark)&txt->end; Location loc = piece_get_extern(txt, pos); if (!loc.piece) - return (Mark)NULL; + return EMARK; return (Mark)(loc.piece->data + loc.off); } size_t text_mark_get(Text *txt, Mark mark) { size_t cur = 0; - if (!mark) + if (mark == EMARK) return EPOS; if (mark == (Mark)&txt->begin) return 0; @@ -9,6 +9,9 @@ #include <sys/types.h> #include <sys/stat.h> +typedef uintptr_t Mark; + +#define EMARK ((Mark)0) /* invalid mark */ #define EPOS ((size_t)-1) /* invalid position */ typedef size_t Filepos; @@ -100,7 +103,6 @@ bool text_iterator_codepoint_prev(Iterator *it, char *c); bool text_iterator_char_next(Iterator*, char *c); bool text_iterator_char_prev(Iterator*, char *c); -typedef uintptr_t Mark; /* mark position `pos', the returned mark can be used to later retrieve * the same text segment */ Mark text_mark_set(Text*, size_t pos); diff --git a/vis-operators.c b/vis-operators.c index 51f03ab..8d28dc4 100644 --- a/vis-operators.c +++ b/vis-operators.c @@ -185,7 +185,7 @@ static size_t op_cursor(Vis *vis, Text *txt, OperatorContext *c) { static size_t op_join(Vis *vis, Text *txt, OperatorContext *c) { size_t pos = text_line_begin(txt, c->range.end), prev_pos; - Mark mark = NULL; + Mark mark = EMARK; /* if operator and range are both linewise, skip last line break */ if (c->linewise && text_range_is_linewise(txt, &c->range)) { @@ -208,7 +208,7 @@ static size_t op_join(Vis *vis, Text *txt, OperatorContext *c) { if (text_byte_get(txt, pos-1, &prev) && !isspace((unsigned char)prev) && text_byte_get(txt, pos, &next) && next != '\r' && next != '\n') text_insert(txt, pos, c->arg->s, len); - if (!mark) + if (mark == EMARK) mark = text_mark_set(txt, pos); } while (pos != prev_pos); |
