version 1.53, 2020/12/03 07:12:12 |
version 1.54, 2021/04/12 06:50:25 |
|
|
"}" \ |
"}" \ |
"}" |
"}" |
|
|
|
#define WINDOW_TREE_DEFAULT_KEY_FORMAT \ |
|
"#{?#{e|<:#{line},10}," \ |
|
"#{line}" \ |
|
"," \ |
|
"#{?#{e|<:#{line},36}," \ |
|
"M-#{a:#{e|+:97,#{e|-:#{line},10}}}" \ |
|
"," \ |
|
"" \ |
|
"}" \ |
|
"}" |
|
|
static const struct menu_item window_tree_menu_items[] = { |
static const struct menu_item window_tree_menu_items[] = { |
{ "Select", '\r', NULL }, |
{ "Select", '\r', NULL }, |
{ "Expand", KEYC_RIGHT, NULL }, |
{ "Expand", KEYC_RIGHT, NULL }, |
|
|
|
|
struct mode_tree_data *data; |
struct mode_tree_data *data; |
char *format; |
char *format; |
|
char *key_format; |
char *command; |
char *command; |
int squash_groups; |
int squash_groups; |
|
|
|
|
window_tree_key(wme, c, NULL, NULL, key, NULL); |
window_tree_key(wme, c, NULL, NULL, key, NULL); |
} |
} |
|
|
|
static key_code |
|
window_tree_get_key(void *modedata, void *itemdata, u_int line) |
|
{ |
|
struct window_tree_modedata *data = modedata; |
|
struct window_tree_itemdata *item = itemdata; |
|
struct format_tree *ft; |
|
struct session *s; |
|
struct winlink *wl; |
|
struct window_pane *wp; |
|
char *expanded; |
|
key_code key; |
|
|
|
ft = format_create(NULL, NULL, FORMAT_NONE, 0); |
|
window_tree_pull_item(item, &s, &wl, &wp); |
|
if (item->type == WINDOW_TREE_SESSION) |
|
format_defaults(ft, NULL, s, NULL, NULL); |
|
else if (item->type == WINDOW_TREE_WINDOW) |
|
format_defaults(ft, NULL, s, wl, NULL); |
|
else |
|
format_defaults(ft, NULL, s, wl, wp); |
|
format_add(ft, "line", "%u", line); |
|
|
|
expanded = format_expand(ft, data->key_format); |
|
key = key_string_lookup_string(expanded); |
|
free(expanded); |
|
format_free(ft); |
|
return key; |
|
} |
|
|
static struct screen * |
static struct screen * |
window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, |
window_tree_init(struct window_mode_entry *wme, struct cmd_find_state *fs, |
struct args *args) |
struct args *args) |
|
|
data->format = xstrdup(WINDOW_TREE_DEFAULT_FORMAT); |
data->format = xstrdup(WINDOW_TREE_DEFAULT_FORMAT); |
else |
else |
data->format = xstrdup(args_get(args, 'F')); |
data->format = xstrdup(args_get(args, 'F')); |
|
if (args == NULL || !args_has(args, 'K')) |
|
data->key_format = xstrdup(WINDOW_TREE_DEFAULT_KEY_FORMAT); |
|
else |
|
data->key_format = xstrdup(args_get(args, 'K')); |
if (args == NULL || args->argc == 0) |
if (args == NULL || args->argc == 0) |
data->command = xstrdup(WINDOW_TREE_DEFAULT_COMMAND); |
data->command = xstrdup(WINDOW_TREE_DEFAULT_COMMAND); |
else |
else |
|
|
data->squash_groups = !args_has(args, 'G'); |
data->squash_groups = !args_has(args, 'G'); |
|
|
data->data = mode_tree_start(wp, args, window_tree_build, |
data->data = mode_tree_start(wp, args, window_tree_build, |
window_tree_draw, window_tree_search, window_tree_menu, NULL, data, |
window_tree_draw, window_tree_search, window_tree_menu, NULL, |
window_tree_menu_items, window_tree_sort_list, |
window_tree_get_key, data, window_tree_menu_items, |
nitems(window_tree_sort_list), &s); |
window_tree_sort_list, nitems(window_tree_sort_list), &s); |
mode_tree_zoom(data->data, args); |
mode_tree_zoom(data->data, args); |
|
|
mode_tree_build(data->data); |
mode_tree_build(data->data); |
|
|
free(data->item_list); |
free(data->item_list); |
|
|
free(data->format); |
free(data->format); |
|
free(data->key_format); |
free(data->command); |
free(data->command); |
|
|
free(data); |
free(data); |