=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-buffer.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -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 **** ! /* $OpenBSD: window-buffer.c,v 1.8 2017/06/09 16:01:39 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-buffer.c,v 1.9 2017/08/09 11:43:45 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott *************** *** 36,41 **** --- 36,44 ---- #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,64 **** struct window_buffer_itemdata { const char *name; - time_t created; u_int order; size_t size; }; --- 61,66 ---- *************** *** 66,71 **** --- 68,74 ---- struct window_buffer_modedata { struct mode_tree_data *data; char *command; + char *format; struct window_buffer_itemdata **item_list; u_int item_size; *************** *** 132,138 **** struct window_buffer_itemdata *item; u_int i; struct paste_buffer *pb; ! char *tim, *text, *cp; struct format_tree *ft; for (i = 0; i < data->item_size; i++) --- 135,141 ---- struct window_buffer_itemdata *item; u_int i; struct paste_buffer *pb; ! char *text, *cp; struct format_tree *ft; for (i = 0; i < data->item_size; i++) *************** *** 145,151 **** 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); } --- 148,153 ---- *************** *** 168,179 **** for (i = 0; i < data->item_size; i++) { item = data->item_list[i]; 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); --- 170,182 ---- 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) { cp = format_expand(ft, filter); if (!format_true(cp)) { free(cp); *************** *** 181,196 **** continue; } free(cp); - format_free(ft); } ! tim = ctime(&item->created); ! *strchr(tim, '\n') = '\0'; ! ! xasprintf(&text, "%zu bytes (%s)", item->size, tim); mode_tree_add(data->data, NULL, item, item->order, item->name, text, -1); free(text); } } --- 184,197 ---- continue; } free(cp); } ! 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,274 **** --- 270,279 ---- 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,305 **** --- 304,312 ---- window_buffer_free_item(data->item_list[i]); free(data->item_list); + free(data->format); free(data->command); + free(data); }