summaryrefslogtreecommitdiffstats
path: root/window-buffer.c
diff options
context:
space:
mode:
authornicm <nicm>2017-08-09 11:43:45 +0000
committernicm <nicm>2017-08-09 11:43:45 +0000
commit5dd5543fe42d4d485b9020f3ce8b8d4d47d29001 (patch)
tree5981d6d6a70649f0ff6f745d15a36fdfc2d3c3ca /window-buffer.c
parent31b06571aa565c347c89458a1b357c6cd5d289be (diff)
Add -F to choose-tree, choose-client, choose-buffer to specify the
format of each line, as well as adding a couple of formats needed for the default display.
Diffstat (limited to 'window-buffer.c')
-rw-r--r--window-buffer.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/window-buffer.c b/window-buffer.c
index cfc72c8d..e37cd32a 100644
--- a/window-buffer.c
+++ b/window-buffer.c
@@ -36,6 +36,9 @@ static void window_buffer_key(struct window_pane *,
#define WINDOW_BUFFER_DEFAULT_COMMAND "paste-buffer -b '%%'"
+#define WINDOW_BUFFER_DEFAULT_FORMAT \
+ "#{buffer_size} bytes (#{t:buffer_created})"
+
const struct window_mode window_buffer_mode = {
.name = "buffer-mode",
@@ -58,7 +61,6 @@ static const char *window_buffer_sort_list[] = {
struct window_buffer_itemdata {
const char *name;
- time_t created;
u_int order;
size_t size;
};
@@ -66,6 +68,7 @@ struct window_buffer_itemdata {
struct window_buffer_modedata {
struct mode_tree_data *data;
char *command;
+ char *format;
struct window_buffer_itemdata **item_list;
u_int item_size;
@@ -132,7 +135,7 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag,
struct window_buffer_itemdata *item;
u_int i;
struct paste_buffer *pb;
- char *tim, *text, *cp;
+ char *text, *cp;
struct format_tree *ft;
for (i = 0; i < data->item_size; i++)
@@ -145,7 +148,6 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag,
while ((pb = paste_walk(pb)) != NULL) {
item = window_buffer_add_item(data);
item->name = xstrdup(paste_buffer_name(pb));
- item->created = paste_buffer_created(pb);
paste_buffer_data(pb, &item->size);
item->order = paste_buffer_order(pb);
}
@@ -168,12 +170,13 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag,
for (i = 0; i < data->item_size; i++) {
item = data->item_list[i];
+ pb = paste_get_name(item->name);
+ if (pb == NULL)
+ continue;
+ ft = format_create(NULL, NULL, FORMAT_NONE, 0);
+ format_defaults_paste_buffer(ft, pb);
+
if (filter != NULL) {
- pb = paste_get_name(item->name);
- if (pb == NULL)
- continue;
- ft = format_create(NULL, NULL, FORMAT_NONE, 0);
- format_defaults_paste_buffer(ft, pb);
cp = format_expand(ft, filter);
if (!format_true(cp)) {
free(cp);
@@ -181,16 +184,14 @@ window_buffer_build(void *modedata, u_int sort_type, __unused uint64_t *tag,
continue;
}
free(cp);
- format_free(ft);
}
- tim = ctime(&item->created);
- *strchr(tim, '\n') = '\0';
-
- xasprintf(&text, "%zu bytes (%s)", item->size, tim);
+ text = format_expand(ft, data->format);
mode_tree_add(data->data, NULL, item, item->order, item->name,
text, -1);
free(text);
+
+ format_free(ft);
}
}
@@ -269,6 +270,10 @@ window_buffer_init(struct window_pane *wp, __unused struct cmd_find_state *fs,
wp->modedata = data = xcalloc(1, sizeof *data);
+ if (args == NULL || !args_has(args, 'F'))
+ data->format = xstrdup(WINDOW_BUFFER_DEFAULT_FORMAT);
+ else
+ data->format = xstrdup(args_get(args, 'F'));
if (args == NULL || args->argc == 0)
data->command = xstrdup(WINDOW_BUFFER_DEFAULT_COMMAND);
else
@@ -299,7 +304,9 @@ window_buffer_free(struct window_pane *wp)
window_buffer_free_item(data->item_list[i]);
free(data->item_list);
+ free(data->format);
free(data->command);
+
free(data);
}