summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/window-tree.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2017-08-09 11:43:46 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2017-08-09 11:43:46 +0000
commitb569092a552057121e70b1dc6b87b778245bd249 (patch)
tree37aa8b5021530fa76876aad479f00dc24c7313c0 /usr.bin/tmux/window-tree.c
parentcbf63c3af960927d66f75a6f74bcc09976a41cba (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.c41
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);
}