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:
Mbuffer.c | 7+++++++
Mbuffer.h | 2++
Mregister.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(&reg->buf); return reg->buf.data; case REGISTER_CLIPBOARD: {