From 8dd776106dc54c5ec722317d20290f17ce9aff43 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Oct 2017 11:26:11 +0000 Subject: Add P key to paste tagged in buffer mode, and trim some code that should no longer be necessary. --- window-buffer.c | 61 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 30 deletions(-) (limited to 'window-buffer.c') diff --git a/window-buffer.c b/window-buffer.c index e37cd32a..5f58a858 100644 --- a/window-buffer.c +++ b/window-buffer.c @@ -319,7 +319,8 @@ window_buffer_resize(struct window_pane *wp, u_int sx, u_int sy) } static void -window_buffer_do_delete(void* modedata, void *itemdata, __unused key_code key) +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; @@ -331,53 +332,53 @@ window_buffer_do_delete(void* modedata, void *itemdata, __unused key_code key) paste_free(pb); } +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; - 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); + finished = mode_tree_key(mtd, 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); + 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(data->data, window_buffer_do_delete, key, - 0); - mode_tree_build(data->data); + 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(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; + 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(data->data); + mode_tree_draw(mtd); wp->flags |= PANE_REDRAW; } } -- cgit v1.2.3