summaryrefslogtreecommitdiffstats
path: root/paste.c
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2010-06-22 23:35:20 +0000
committerTiago Cunha <tcunha@gmx.com>2010-06-22 23:35:20 +0000
commitbf1e23741015c60e869bd0cdff16e86a35195f7d (patch)
tree4b2d2cd21b102b93ec6614608d7526c6b89acb5a /paste.c
parent8d3b726396d3f5124d31a792a5f3358357f2e105 (diff)
Sync OpenBSD patchset 726:
Add a choose-buffer command for easier use of the paste buffer stack.
Diffstat (limited to 'paste.c')
-rw-r--r--paste.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/paste.c b/paste.c
index 2ff4133e..e54abc4d 100644
--- a/paste.c
+++ b/paste.c
@@ -1,4 +1,4 @@
-/* $Id: paste.c,v 1.13 2009-12-04 22:14:47 tcunha Exp $ */
+/* $Id: paste.c,v 1.14 2010-06-22 23:35:20 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -20,6 +20,7 @@
#include <sys/time.h>
#include <string.h>
+#include <vis.h>
#include "tmux.h"
@@ -156,3 +157,27 @@ paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size)
return (0);
}
+
+/* Convert a buffer into a visible string. */
+char *
+paste_print(struct paste_buffer *pb, size_t width)
+{
+ char *buf;
+ size_t len, used;
+
+ if (width < 3)
+ width = 3;
+ buf = xmalloc(width * 4 + 1);
+
+ len = pb->size;
+ if (len > width)
+ len = width;
+
+ used = strvisx(buf, pb->data, len, VIS_OCTAL|VIS_TAB|VIS_NL);
+ if (pb->size > width || used > width) {
+ buf[width - 3] = '\0';
+ strlcat(buf, "...", width);
+ }
+
+ return (buf);
+}