version 1.7, 2012/08/14 08:51:53 |
version 1.8, 2012/09/03 09:01:16 |
|
|
struct args *args = self->args; |
struct args *args = self->args; |
struct winlink *wl, *wm; |
struct winlink *wl, *wm; |
struct session *s, *s2; |
struct session *s, *s2; |
|
struct tty *tty; |
struct window_choose_data *wcd = NULL; |
struct window_choose_data *wcd = NULL; |
const char *ses_template, *win_template; |
const char *ses_template, *win_template; |
char *final_win_action, *final_win_template; |
char *final_win_action, *cur_win_template; |
|
char *final_win_template_middle; |
|
char *final_win_template_last; |
const char *ses_action, *win_action; |
const char *ses_action, *win_action; |
u_int cur_win, idx_ses, win_ses; |
u_int cur_win, idx_ses, win_ses, win_max; |
u_int wflag, sflag; |
u_int wflag, sflag; |
|
|
ses_template = win_template = NULL; |
ses_template = win_template = NULL; |
|
|
} |
} |
|
|
s = ctx->curclient->session; |
s = ctx->curclient->session; |
|
tty = &ctx->curclient->tty; |
|
|
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) |
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
|
|
* window template, otherwise just render the windows as a flat list |
* window template, otherwise just render the windows as a flat list |
* without any padding. |
* without any padding. |
*/ |
*/ |
if (wflag && sflag) |
if (wflag && sflag) { |
xasprintf(&final_win_template, " --> %s", win_template); |
xasprintf(&final_win_template_middle, " |-> %s", win_template); |
else if (wflag) |
xasprintf(&final_win_template_last, " \\-> %s", win_template); |
final_win_template = xstrdup(win_template); |
} else if (wflag) { |
else |
final_win_template_middle = xstrdup(win_template); |
final_win_template = NULL; |
final_win_template_last = xstrdup(win_template); |
|
} else |
|
final_win_template_middle = final_win_template_last = NULL; |
|
|
idx_ses = cur_win = -1; |
idx_ses = cur_win = -1; |
RB_FOREACH(s2, sessions, &sessions) { |
RB_FOREACH(s2, sessions, &sessions) { |
|
|
} |
} |
|
|
wcd = window_choose_add_session(wl->window->active, |
wcd = window_choose_add_session(wl->window->active, |
ctx, s2, ses_template, (char *)ses_action, idx_ses); |
ctx, s2, ses_template, (char *)ses_action, idx_ses); |
|
|
/* If we're just choosing sessions, skip choosing windows. */ |
/* If we're just choosing sessions, skip choosing windows. */ |
if (sflag && !wflag) { |
if (sflag && !wflag) { |
|
|
continue; |
continue; |
} |
} |
windows_only: |
windows_only: |
win_ses = -1; |
win_ses = win_max = -1; |
|
RB_FOREACH(wm, winlinks, &s2->windows) |
|
win_max++; |
RB_FOREACH(wm, winlinks, &s2->windows) { |
RB_FOREACH(wm, winlinks, &s2->windows) { |
win_ses++; |
win_ses++; |
if (sflag && wflag) |
if (sflag && wflag) |
|
|
} |
} |
|
|
xasprintf(&final_win_action, "%s ; %s", win_action, |
xasprintf(&final_win_action, "%s ; %s", win_action, |
wcd ? wcd->command : ""); |
wcd ? wcd->command : ""); |
|
|
|
if (win_ses != win_max) |
|
cur_win_template = final_win_template_middle; |
|
else |
|
cur_win_template = final_win_template_last; |
|
|
window_choose_add_window(wl->window->active, |
window_choose_add_window(wl->window->active, |
ctx, s2, wm, final_win_template, |
ctx, s2, wm, cur_win_template, |
final_win_action, idx_ses); |
final_win_action, idx_ses); |
|
|
free(final_win_action); |
free(final_win_action); |
} |
} |
|
|
if (wflag && !sflag) |
if (wflag && !sflag) |
break; |
break; |
} |
} |
free(final_win_template); |
free(final_win_template_middle); |
|
free(final_win_template_last); |
|
|
window_choose_ready(wl->window->active, cur_win, |
window_choose_ready(wl->window->active, cur_win, |
cmd_choose_tree_callback, cmd_choose_tree_free); |
cmd_choose_tree_callback, cmd_choose_tree_free); |