vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit d1f9df81ffd534780598f6a7e2fb53d8d0c4bf7c parent 131fe6ea5cfbeb0d3cc81f1ad66e4c5c82f42056 Author: Marc André Tanner <mat@brain-dump.org> Date: Thu, 25 Feb 2016 16:50:30 +0100 vis: ignore trailing NUL byte of register content by default This is handy when editing registers used for macros. Diffstat:
| M | buffer.c | | | 7 | +++++++ |
| M | buffer.h | | | 2 | ++ |
| M | register.c | | | 2 | +- |
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/buffer.c b/buffer.c @@ -88,3 +88,10 @@ bool buffer_prepend(Buffer *buf, const void *data, size_t len) { bool buffer_prepend0(Buffer *buf, const char *data) { return buffer_prepend(buf, data, strlen(data) + (buf->len == 0)); } + +size_t buffer_length0(Buffer *buf) { + size_t len = buf->len; + if (len > 0 && buf->data[len-1] == '\0') + len--; + return len; +} diff --git a/buffer.h b/buffer.h @@ -38,5 +38,7 @@ bool buffer_append0(Buffer*, const char *data); bool buffer_prepend(Buffer*, const void *data, size_t len); /* prepend NUL-terminated data */ bool buffer_prepend0(Buffer*, const char *data); +/* return length of a buffer without trailing NUL byte */ +size_t buffer_length0(Buffer*); #endif diff --git a/register.c b/register.c @@ -30,7 +30,7 @@ void register_release(Register *reg) { const char *register_get(Vis *vis, Register *reg, size_t *len) { switch (reg->type) { case REGISTER_NORMAL: - *len = reg->buf.len; + *len = buffer_length0(®->buf); return reg->buf.data; case REGISTER_CLIPBOARD: {