summaryrefslogtreecommitdiffstats
path: root/window-choose.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2012-09-03 09:57:57 +0000
committerNicholas Marriott <nicm@openbsd.org>2012-09-03 09:57:57 +0000
commit7263fa36eb3d4488b89d01837dc4bd533e6f061a (patch)
treece66b33f248c3acadefb7302946d323b657dfe18 /window-choose.c
parentadc9fad4acc2f7e045b23b3672bca7f24ba10566 (diff)
add cmd-choose-list to allow arbitrary options to be selected. From
Thomas Adam.
Diffstat (limited to 'window-choose.c')
-rw-r--r--window-choose.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/window-choose.c b/window-choose.c
index 9d08376e..7bab2ffe 100644
--- a/window-choose.c
+++ b/window-choose.c
@@ -637,6 +637,38 @@ window_choose_add_session(struct window_pane *wp, struct cmd_ctx *ctx,
}
struct window_choose_data *
+window_choose_add_item(struct window_pane *wp, struct cmd_ctx *ctx,
+ struct winlink *wl, const char *template, char *action, u_int idx)
+{
+ struct window_choose_data *wcd;
+ char *action_data;
+
+ wcd = window_choose_data_create(ctx);
+ wcd->idx = wl->idx;
+ wcd->ft_template = xstrdup(template);
+ format_add(wcd->ft, "line", "%u", idx);
+ format_session(wcd->ft, wcd->session);
+ format_winlink(wcd->ft, wcd->session, wl);
+ format_window_pane(wcd->ft, wl->window->active);
+
+ wcd->client->references++;
+ wcd->session->references++;
+
+ window_choose_add(wp, wcd);
+
+ /*
+ * Interpolate action_data here, since the data we pass back is the
+ * expanded template itself.
+ */
+ xasprintf(&action_data, "%s", format_expand(wcd->ft, wcd->ft_template));
+ wcd->command = cmd_template_replace(action, action_data, 1);
+ free(action_data);
+
+ return (wcd);
+
+}
+
+struct window_choose_data *
window_choose_add_window(struct window_pane *wp, struct cmd_ctx *ctx,
struct session *s, struct winlink *wl, const char *template,
char *action, u_int idx)