version 1.8, 2011/03/27 20:27:26 |
version 1.9, 2011/03/28 23:13:00 |
|
|
|
|
int cmd_list_panes_exec(struct cmd *, struct cmd_ctx *); |
int cmd_list_panes_exec(struct cmd *, struct cmd_ctx *); |
|
|
|
void cmd_list_panes_server(struct cmd_ctx *); |
|
void cmd_list_panes_session(struct session *, struct cmd_ctx *); |
|
void cmd_list_panes_window(struct winlink *, struct cmd_ctx *); |
|
|
const struct cmd_entry cmd_list_panes_entry = { |
const struct cmd_entry cmd_list_panes_entry = { |
"list-panes", "lsp", |
"list-panes", "lsp", |
"t:", 0, 0, |
"ast:", 0, 0, |
CMD_TARGET_WINDOW_USAGE, |
"[-as] [-t target]", |
0, |
0, |
NULL, |
NULL, |
NULL, |
NULL, |
|
|
int |
int |
cmd_list_panes_exec(struct cmd *self, struct cmd_ctx *ctx) |
cmd_list_panes_exec(struct cmd *self, struct cmd_ctx *ctx) |
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct winlink *wl; |
struct session *s; |
|
struct winlink *wl; |
|
|
|
if (args_has(args, 'a')) |
|
cmd_list_panes_server(ctx); |
|
else if (args_has(args, 's')) { |
|
s = cmd_find_session(ctx, args_get(args, 't')); |
|
if (s == NULL) |
|
return (-1); |
|
cmd_list_panes_session(s, ctx); |
|
} else { |
|
wl = cmd_find_window(ctx, args_get(args, 't'), NULL); |
|
if (wl == NULL) |
|
return (-1); |
|
cmd_list_panes_window(wl, ctx); |
|
} |
|
|
|
return (0); |
|
} |
|
|
|
void |
|
cmd_list_panes_server(struct cmd_ctx *ctx) |
|
{ |
|
struct session *s; |
|
|
|
RB_FOREACH(s, sessions, &sessions) |
|
cmd_list_panes_session(s, ctx); |
|
} |
|
|
|
void |
|
cmd_list_panes_session(struct session *s, struct cmd_ctx *ctx) |
|
{ |
|
struct winlink *wl; |
|
|
|
RB_FOREACH(wl, winlinks, &s->windows) |
|
cmd_list_panes_window(wl, ctx); |
|
} |
|
|
|
void |
|
cmd_list_panes_window(struct winlink *wl, struct cmd_ctx *ctx) |
|
{ |
struct window_pane *wp; |
struct window_pane *wp; |
struct grid *gd; |
struct grid *gd; |
struct grid_line *gl; |
struct grid_line *gl; |
u_int i, n; |
u_int i, n; |
unsigned long long size; |
unsigned long long size; |
|
|
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) |
|
return (-1); |
|
|
|
n = 0; |
n = 0; |
TAILQ_FOREACH(wp, &wl->window->panes, entry) { |
TAILQ_FOREACH(wp, &wl->window->panes, entry) { |
gd = wp->base.grid; |
gd = wp->base.grid; |
|
|
} |
} |
size += gd->hsize * sizeof *gd->linedata; |
size += gd->hsize * sizeof *gd->linedata; |
|
|
ctx->print(ctx, "%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s", |
ctx->print(ctx, |
|
"%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s", |
n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, wp->id, |
n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, wp->id, |
wp == wp->window->active ? " (active)" : "", |
wp == wp->window->active ? " (active)" : "", |
wp->fd == -1 ? " (dead)" : ""); |
wp->fd == -1 ? " (dead)" : ""); |
n++; |
n++; |
} |
} |
|
|
return (0); |
|
} |
} |