diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2009-08-18 12:26:38 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2009-08-18 12:26:38 +0000 |
commit | ccdbcab1fb56a1d1818ef90e94b023438b957ff5 (patch) | |
tree | 7a00a3af8ec4193fcd1cdb89fd0411a89d8a347b /usr.bin/tmux/cmd-list-buffers.c | |
parent | 5b6ba66e1e185f5c653a6e1daedba0dfa32e4cb3 (diff) |
Change list-buffers to run the preview of the buffer through vis(1).
Diffstat (limited to 'usr.bin/tmux/cmd-list-buffers.c')
-rw-r--r-- | usr.bin/tmux/cmd-list-buffers.c | 52 |
1 files changed, 21 insertions, 31 deletions
diff --git a/usr.bin/tmux/cmd-list-buffers.c b/usr.bin/tmux/cmd-list-buffers.c index 7e1940cb5f0..6a7194868c4 100644 --- a/usr.bin/tmux/cmd-list-buffers.c +++ b/usr.bin/tmux/cmd-list-buffers.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cmd-list-buffers.c,v 1.3 2009/07/26 12:58:44 nicm Exp $ */ +/* $OpenBSD: cmd-list-buffers.c,v 1.4 2009/08/18 12:26:37 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -19,6 +19,7 @@ #include <sys/types.h> #include <string.h> +#include <vis.h> #include "tmux.h" @@ -46,44 +47,33 @@ cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx) struct session *s; struct paste_buffer *pb; u_int idx; - char *tmp; - size_t size, in, out; + char tmp[51 * 4 + 1]; + size_t size, len; if ((s = cmd_find_session(ctx, data->target)) == NULL) return (-1); - if (s->sx > 35) { /* leave three for ... */ - size = s->sx - 32; - tmp = xmalloc(size + 1); - } else { - size = 0; - tmp = NULL; - } - idx = 0; while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) { - if (tmp != NULL) { - in = out = 0; - while (out < size && pb->data[in] != '\0') { - if (pb->data[in] > 31 && pb->data[in] != 127) - tmp[out++] = pb->data[in]; - in++; - } - tmp[out] = '\0'; - if (out == size) { - tmp[out - 1] = '.'; - tmp[out - 2] = '.'; - tmp[out - 3] = '.'; - } + size = strlen(pb->data); - ctx->print(ctx, "%d: %zu bytes: \"%s\"", - idx - 1, strlen(pb->data), tmp); - } else - ctx->print(ctx, "%d: %zu bytes", idx, strlen(pb->data)); - } + /* Translate the first 50 characters. */ + len = size; + if (len > 50) + len = 50; + strvisx(tmp, pb->data, len, VIS_OCTAL|VIS_TAB|VIS_NL); - if (tmp != NULL) - xfree(tmp); + /* + * If the first 50 characterswere encoded as a longer string, + * or there is definitely more data, add "...". + */ + if (size > 50 || strlen(tmp) > 50) { + tmp[50 - 3] = '\0'; + strlcat(tmp, "...", sizeof tmp); + } + + ctx->print(ctx, "%u: %zu bytes: \"%s\"", idx - 1, size, tmp); + } return (0); } |