Permalink
Newer
Older
100644 79 lines (64 sloc) 2.04 KB
1
/* $Id: cmd-list-buffers.c,v 1.12 2009/09/07 23:48:54 tcunha Exp $ */
2
3
/*
4
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
#include <sys/types.h>
20
21
#include <string.h>
22
23
#include "tmux.h"
24
25
/*
26
* List paste buffers.
27
*/
28
29
int cmd_list_buffers_exec(struct cmd *, struct cmd_ctx *);
30
31
const struct cmd_entry cmd_list_buffers_entry = {
32
"list-buffers", "lsb",
33
CMD_TARGET_SESSION_USAGE,
34
0, 0,
35
cmd_target_init,
36
cmd_target_parse,
37
cmd_list_buffers_exec,
38
cmd_target_free,
39
cmd_target_print
40
};
41
42
int
43
cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx)
44
{
45
struct cmd_target_data *data = self->data;
46
struct session *s;
47
struct paste_buffer *pb;
48
u_int idx;
49
char tmp[51 * 4 + 1];
50
size_t size, len;
51
52
if ((s = cmd_find_session(ctx, data->target)) == NULL)
53
return (-1);
54
55
idx = 0;
56
while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {
57
size = pb->size;
58
59
/* Translate the first 50 characters. */
60
len = size;
61
if (len > 50)
62
len = 50;
63
strvisx(tmp, pb->data, len, VIS_OCTAL|VIS_TAB|VIS_NL);
64
65
/*
66
* If the first 50 characterswere encoded as a longer string,
67
* or there is definitely more data, add "...".
68
*/
69
if (size > 50 || strlen(tmp) > 50) {
70
tmp[50 - 3] = '\0';
71
strlcat(tmp, "...", sizeof tmp);
72
}
73
74
ctx->print(ctx, "%u: %zu bytes: \"%s\"", idx - 1, size, tmp);
75
}
76
77
return (0);
78
}