=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-buffer.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- src/usr.bin/tmux/window-buffer.c 2017/06/09 16:01:39 1.8 +++ src/usr.bin/tmux/window-buffer.c 2017/08/09 11:43:45 1.9 @@ -1,4 +1,4 @@ -/* $OpenBSD: window-buffer.c,v 1.8 2017/06/09 16:01:39 nicm Exp $ */ +/* $OpenBSD: window-buffer.c,v 1.9 2017/08/09 11:43:45 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott @@ -36,6 +36,9 @@ #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 @@ struct window_buffer_itemdata { const char *name; - time_t created; u_int order; size_t size; }; @@ -66,6 +68,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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_item(data->item_list[i]); free(data->item_list); + free(data->format); free(data->command); + free(data); }