=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-tree.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- src/usr.bin/tmux/window-tree.c 2019/04/30 06:19:51 1.37 +++ src/usr.bin/tmux/window-tree.c 2019/05/12 08:58:09 1.38 @@ -1,4 +1,4 @@ -/* $OpenBSD: window-tree.c,v 1.37 2019/04/30 06:19:51 nicm Exp $ */ +/* $OpenBSD: window-tree.c,v 1.38 2019/05/12 08:58:09 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott @@ -53,6 +53,19 @@ "}" \ "}" +#define WINDOW_TREE_MENU \ + "Select,Enter,|" \ + "Expand,Right,|" \ + "|" \ + "Tag,t,|" \ + "Tag All,C-t,|" \ + "Tag None,T,|" \ + "|" \ + "Kill,x,|" \ + "Kill Tagged,X,|" \ + "|" \ + "Cancel,q," + const struct window_mode window_tree_mode = { .name = "tree-mode", .default_format = WINDOW_TREE_DEFAULT_FORMAT, @@ -814,6 +827,19 @@ return (0); } +static void +window_tree_menu(void *modedata, struct client *c, key_code key) +{ + struct window_tree_modedata *data = modedata; + struct window_pane *wp = data->wp; + struct window_mode_entry *wme; + + wme = TAILQ_FIRST(&wp->modes); + if (wme == NULL || wme->data != modedata) + return; + window_tree_key(wme, c, NULL, NULL, key, NULL); +} + static struct screen * window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, struct args *args) @@ -823,6 +849,8 @@ struct screen *s; wme->data = data = xcalloc(1, sizeof *data); + data->wp = wp; + data->references = 1; if (args_has(args, 's')) data->type = WINDOW_TREE_SESSION; @@ -832,9 +860,6 @@ data->type = WINDOW_TREE_PANE; memcpy(&data->fs, fs, sizeof data->fs); - data->wp = wp; - data->references = 1; - if (args == NULL || !args_has(args, 'F')) data->format = xstrdup(WINDOW_TREE_DEFAULT_FORMAT); else @@ -846,7 +871,8 @@ data->squash_groups = !args_has(args, 'G'); data->data = mode_tree_start(wp, args, window_tree_build, - window_tree_draw, window_tree_search, data, window_tree_sort_list, + window_tree_draw, window_tree_search, window_tree_menu, data, + WINDOW_TREE_MENU, window_tree_sort_list, nitems(window_tree_sort_list), &s); mode_tree_zoom(data->data, args); @@ -1146,7 +1172,7 @@ item = new_item; data->offset = 0; } - if (KEYC_IS_MOUSE(key)) + if (KEYC_IS_MOUSE(key) && m != NULL) key = window_tree_mouse(data, key, x, item); switch (key) { case '<': @@ -1207,7 +1233,6 @@ free(prompt); break; case '\r': - item = mode_tree_get_current(data->data); name = window_tree_get_target(item, &fs); if (name != NULL) mode_tree_run_command(c, NULL, data->command, name);