=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-buffer.c,v retrieving revision 1.9 retrieving revision 1.10 diff -c -r1.9 -r1.10 *** src/usr.bin/tmux/window-buffer.c 2017/08/09 11:43:45 1.9 --- src/usr.bin/tmux/window-buffer.c 2017/10/25 11:26:11 1.10 *************** *** 1,4 **** ! /* $OpenBSD: window-buffer.c,v 1.9 2017/08/09 11:43:45 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-buffer.c,v 1.10 2017/10/25 11:26:11 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott *************** *** 319,325 **** } static void ! window_buffer_do_delete(void* modedata, void *itemdata, __unused key_code key) { struct window_buffer_modedata *data = modedata; struct window_buffer_itemdata *item = itemdata; --- 319,326 ---- } static void ! window_buffer_do_delete(void* modedata, void *itemdata, ! __unused struct client *c, __unused key_code key) { struct window_buffer_modedata *data = modedata; struct window_buffer_itemdata *item = itemdata; *************** *** 332,383 **** } static void window_buffer_key(struct window_pane *wp, struct client *c, __unused struct session *s, key_code key, struct mouse_event *m) { struct window_buffer_modedata *data = wp->modedata; struct window_buffer_itemdata *item; - char *command, *name; int finished; ! /* ! * t = toggle tag ! * T = tag none ! * C-t = tag all ! * q = exit ! * O = change sort order ! * ! * d = delete buffer ! * D = delete tagged buffers ! * Enter = paste buffer ! */ ! ! finished = mode_tree_key(data->data, c, &key, m); switch (key) { case 'd': ! item = mode_tree_get_current(data->data); ! window_buffer_do_delete(data, item, key); ! mode_tree_build(data->data); break; case 'D': ! mode_tree_each_tagged(data->data, window_buffer_do_delete, key, ! 0); ! mode_tree_build(data->data); break; case '\r': ! item = mode_tree_get_current(data->data); ! command = xstrdup(data->command); ! name = xstrdup(item->name); ! window_pane_reset_mode(wp); ! mode_tree_run_command(c, NULL, command, name); ! free(name); ! free(command); ! return; } if (finished || paste_get_top(NULL) == NULL) window_pane_reset_mode(wp); else { ! mode_tree_draw(data->data); wp->flags |= PANE_REDRAW; } } --- 333,384 ---- } static void + window_buffer_do_paste(void* modedata, void *itemdata, struct client *c, + __unused key_code key) + { + struct window_buffer_modedata *data = modedata; + struct window_buffer_itemdata *item = itemdata; + struct paste_buffer *pb; + + if ((pb = paste_get_name(item->name)) != NULL) + mode_tree_run_command(c, NULL, data->command, item->name); + } + + static void window_buffer_key(struct window_pane *wp, struct client *c, __unused struct session *s, key_code key, struct mouse_event *m) { struct window_buffer_modedata *data = wp->modedata; + struct mode_tree_data *mtd = data->data; struct window_buffer_itemdata *item; int finished; ! finished = mode_tree_key(mtd, c, &key, m); switch (key) { case 'd': ! item = mode_tree_get_current(mtd); ! window_buffer_do_delete(data, item, c, key); ! mode_tree_build(mtd); break; case 'D': ! mode_tree_each_tagged(mtd, window_buffer_do_delete, c, key, 0); ! mode_tree_build(mtd); break; + case 'P': + mode_tree_each_tagged(mtd, window_buffer_do_paste, c, key, 0); + finished = 1; + break; + case 'p': case '\r': ! item = mode_tree_get_current(mtd); ! window_buffer_do_paste(data, item, c, key); ! finished = 1; ! break; } if (finished || paste_get_top(NULL) == NULL) window_pane_reset_mode(wp); else { ! mode_tree_draw(mtd); wp->flags |= PANE_REDRAW; } }