version 1.8, 2017/06/09 16:01:39 |
version 1.9, 2017/08/09 11:43:45 |
|
|
|
|
#define WINDOW_BUFFER_DEFAULT_COMMAND "paste-buffer -b '%%'" |
#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 = { |
const struct window_mode window_buffer_mode = { |
.name = "buffer-mode", |
.name = "buffer-mode", |
|
|
|
|
|
|
struct window_buffer_itemdata { |
struct window_buffer_itemdata { |
const char *name; |
const char *name; |
time_t created; |
|
u_int order; |
u_int order; |
size_t size; |
size_t size; |
}; |
}; |
|
|
struct window_buffer_modedata { |
struct window_buffer_modedata { |
struct mode_tree_data *data; |
struct mode_tree_data *data; |
char *command; |
char *command; |
|
char *format; |
|
|
struct window_buffer_itemdata **item_list; |
struct window_buffer_itemdata **item_list; |
u_int item_size; |
u_int item_size; |
|
|
struct window_buffer_itemdata *item; |
struct window_buffer_itemdata *item; |
u_int i; |
u_int i; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
char *tim, *text, *cp; |
char *text, *cp; |
struct format_tree *ft; |
struct format_tree *ft; |
|
|
for (i = 0; i < data->item_size; i++) |
for (i = 0; i < data->item_size; i++) |
|
|
while ((pb = paste_walk(pb)) != NULL) { |
while ((pb = paste_walk(pb)) != NULL) { |
item = window_buffer_add_item(data); |
item = window_buffer_add_item(data); |
item->name = xstrdup(paste_buffer_name(pb)); |
item->name = xstrdup(paste_buffer_name(pb)); |
item->created = paste_buffer_created(pb); |
|
paste_buffer_data(pb, &item->size); |
paste_buffer_data(pb, &item->size); |
item->order = paste_buffer_order(pb); |
item->order = paste_buffer_order(pb); |
} |
} |
|
|
for (i = 0; i < data->item_size; i++) { |
for (i = 0; i < data->item_size; i++) { |
item = data->item_list[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) { |
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); |
cp = format_expand(ft, filter); |
if (!format_true(cp)) { |
if (!format_true(cp)) { |
free(cp); |
free(cp); |
|
|
continue; |
continue; |
} |
} |
free(cp); |
free(cp); |
format_free(ft); |
|
} |
} |
|
|
tim = ctime(&item->created); |
text = format_expand(ft, data->format); |
*strchr(tim, '\n') = '\0'; |
|
|
|
xasprintf(&text, "%zu bytes (%s)", item->size, tim); |
|
mode_tree_add(data->data, NULL, item, item->order, item->name, |
mode_tree_add(data->data, NULL, item, item->order, item->name, |
text, -1); |
text, -1); |
free(text); |
free(text); |
|
|
|
format_free(ft); |
} |
} |
|
|
} |
} |
|
|
|
|
wp->modedata = data = xcalloc(1, sizeof *data); |
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) |
if (args == NULL || args->argc == 0) |
data->command = xstrdup(WINDOW_BUFFER_DEFAULT_COMMAND); |
data->command = xstrdup(WINDOW_BUFFER_DEFAULT_COMMAND); |
else |
else |
|
|
window_buffer_free_item(data->item_list[i]); |
window_buffer_free_item(data->item_list[i]); |
free(data->item_list); |
free(data->item_list); |
|
|
|
free(data->format); |
free(data->command); |
free(data->command); |
|
|
free(data); |
free(data); |
} |
} |
|
|