diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2017-08-09 11:43:46 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2017-08-09 11:43:46 +0000 |
commit | b569092a552057121e70b1dc6b87b778245bd249 (patch) | |
tree | 37aa8b5021530fa76876aad479f00dc24c7313c0 /usr.bin/tmux/window-tree.c | |
parent | cbf63c3af960927d66f75a6f74bcc09976a41cba (diff) |
Add -F to choose-tree, choose-client, choose-buffer to specify the
format of each line, as well as adding a couple of formats needed for
the default display.
Diffstat (limited to 'usr.bin/tmux/window-tree.c')
-rw-r--r-- | usr.bin/tmux/window-tree.c | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/usr.bin/tmux/window-tree.c b/usr.bin/tmux/window-tree.c index 926261bf59d..2384581089e 100644 --- a/usr.bin/tmux/window-tree.c +++ b/usr.bin/tmux/window-tree.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window-tree.c,v 1.14 2017/07/28 10:59:58 nicm Exp $ */ +/* $OpenBSD: window-tree.c,v 1.15 2017/08/09 11:43:45 nicm Exp $ */ /* * Copyright (c) 2017 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -33,6 +33,22 @@ static void window_tree_key(struct window_pane *, #define WINDOW_TREE_DEFAULT_COMMAND "switch-client -t '%%'" +#define WINDOW_TREE_DEFAULT_FORMAT \ + "#{?pane_format," \ + "#{pane_current_command} \"#{pane_title}\"" \ + "," \ + "#{?window_format," \ + "#{window_name}#{window_flags} " \ + "(#{window_panes} panes)" \ + "#{?#{==:#{window_panes},1}, \"#{pane_title}\",}" \ + "," \ + "#{session_windows} windows" \ + "#{?session_grouped, (group ,}" \ + "#{session_group}#{?session_grouped,),}" \ + "#{?session_attached, (attached),}" \ + "}" \ + "}" + const struct window_mode window_tree_mode = { .name = "tree-mode", @@ -73,6 +89,7 @@ struct window_tree_modedata { int references; struct mode_tree_data *data; + char *format; char *command; struct window_tree_itemdata **item_list; @@ -215,9 +232,7 @@ window_tree_build_pane(struct session *s, struct winlink *wl, item->winlink = wl->idx; item->pane = wp->id; - text = format_single(NULL, - "#{pane_current_command} \"#{pane_title}\"", - NULL, s, wl, wp); + text = format_single(NULL, data->format, NULL, s, wl, wp); xasprintf(&name, "%u", idx); mode_tree_add(data->data, parent, item, (uint64_t)wp, name, text, -1); @@ -243,10 +258,7 @@ window_tree_build_window(struct session *s, struct winlink *wl, void* modedata, item->winlink = wl->idx; item->pane = -1; - text = format_single(NULL, - "#{window_name}#{window_flags} (#{window_panes} panes)" - "#{?#{==:#{window_panes},1}, \"#{pane_title}\",}", - NULL, s, wl, NULL); + text = format_single(NULL, data->format, NULL, s, wl, NULL); xasprintf(&name, "%u", wl->idx); if (data->type == WINDOW_TREE_SESSION || @@ -319,12 +331,7 @@ window_tree_build_session(struct session *s, void* modedata, item->winlink = -1; item->pane = -1; - text = format_single(NULL, - "#{session_windows} windows" - "#{?session_grouped, (group ,}" - "#{session_group}#{?session_grouped,),}" - "#{?session_attached, (attached),}", - NULL, s, NULL, NULL); + text = format_single(NULL, data->format, NULL, s, NULL, NULL); if (data->type == WINDOW_TREE_SESSION) expanded = 0; @@ -755,6 +762,10 @@ window_tree_init(struct window_pane *wp, struct cmd_find_state *fs, data->wp = wp; data->references = 1; + if (args == NULL || !args_has(args, 'F')) + data->format = xstrdup(WINDOW_TREE_DEFAULT_FORMAT); + else + data->format = xstrdup(args_get(args, 'F')); if (args == NULL || args->argc == 0) data->command = xstrdup(WINDOW_TREE_DEFAULT_COMMAND); else @@ -786,7 +797,9 @@ window_tree_destroy(struct window_tree_modedata *data) window_tree_free_item(data->item_list[i]); free(data->item_list); + free(data->format); free(data->command); + free(data); } |