diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2012-09-03 09:57:57 +0000 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2012-09-04 22:37:29 +0100 |
commit | 28fd3a383598c1f3121c754cf0781cd790929f4f (patch) | |
tree | d3af517cb055137697cbf7baa19708df31f08dd9 /window-choose.c | |
parent | 996a636713e58709ab15fcb753c7e2614d1ec6c3 (diff) | |
download | rtmux-28fd3a383598c1f3121c754cf0781cd790929f4f.tar.gz rtmux-28fd3a383598c1f3121c754cf0781cd790929f4f.tar.bz2 rtmux-28fd3a383598c1f3121c754cf0781cd790929f4f.zip |
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.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/window-choose.c b/window-choose.c index 9ab277d6..c77a1d39 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) |