diff options
author | nicm <nicm> | 2017-08-09 11:43:45 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-08-09 11:43:45 +0000 |
commit | 5dd5543fe42d4d485b9020f3ce8b8d4d47d29001 (patch) | |
tree | 5981d6d6a70649f0ff6f745d15a36fdfc2d3c3ca /window-buffer.c | |
parent | 31b06571aa565c347c89458a1b357c6cd5d289be (diff) | |
download | rtmux-5dd5543fe42d4d485b9020f3ce8b8d4d47d29001.tar.gz rtmux-5dd5543fe42d4d485b9020f3ce8b8d4d47d29001.tar.bz2 rtmux-5dd5543fe42d4d485b9020f3ce8b8d4d47d29001.zip |
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.c | 33 |
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); } |