Add a function to create window flags rather than doing the same thing

in two places. From Thomas Adam.
pull/1/head
Nicholas Marriott 2010-12-30 21:35:17 +00:00
parent f7c42c21ba
commit 2231e72968
4 changed files with 36 additions and 32 deletions

View File

@ -57,7 +57,7 @@ cmd_choose_window_exec(struct cmd *self, struct cmd_ctx *ctx)
struct winlink *wl, *wm;
struct window *w;
u_int idx, cur;
char flag, *title;
char *flags, *title;
const char *left, *right;
if (ctx->curclient == NULL) {
@ -80,20 +80,7 @@ cmd_choose_window_exec(struct cmd *self, struct cmd_ctx *ctx)
cur = idx;
idx++;
flag = ' ';
if (wm->flags & WINLINK_ACTIVITY)
flag = '#';
else if (wm->flags & WINLINK_BELL)
flag = '!';
else if (wm->flags & WINLINK_CONTENT)
flag = '+';
else if (wm->flags & WINLINK_SILENCE)
flag = '~';
else if (wm == s->curw)
flag = '*';
else if (wm == TAILQ_FIRST(&s->lastw))
flag = '-';
flags = window_printable_flags(s, wm);
title = w->active->screen->title;
if (wm == wl)
title = w->active->base.title;
@ -103,10 +90,12 @@ cmd_choose_window_exec(struct cmd *self, struct cmd_ctx *ctx)
left = right = "";
window_choose_add(wl->window->active,
wm->idx, "%3d: %s%c [%ux%u] (%u panes%s)%s%s%s",
wm->idx, w->name, flag, w->sx, w->sy, window_count_panes(w),
wm->idx, "%3d: %s%s [%ux%u] (%u panes%s)%s%s%s",
wm->idx, w->name, flags, w->sx, w->sy, window_count_panes(w),
w->active->fd == -1 ? ", dead" : "",
left, title, right);
xfree(flags);
}
cdata = xmalloc(sizeof *cdata);

View File

@ -393,21 +393,8 @@ status_replace1(struct client *c,struct winlink *wl,
ptr = wl->window->name;
goto do_replace;
case 'F':
tmp[0] = ' ';
if (wl->flags & WINLINK_CONTENT)
tmp[0] = '+';
else if (wl->flags & WINLINK_BELL)
tmp[0] = '!';
else if (wl->flags & WINLINK_ACTIVITY)
tmp[0] = '#';
else if (wl->flags & WINLINK_SILENCE)
tmp[0] = '~';
else if (wl == s->curw)
tmp[0] = '*';
else if (wl == TAILQ_FIRST(&s->lastw))
tmp[0] = '-';
tmp[1] = '\0';
ptr = tmp;
ptr = window_printable_flags(s, wl);
freeptr = ptr;
goto do_replace;
case '[':
/*

2
tmux.h
View File

@ -1898,6 +1898,8 @@ void window_pane_mouse(struct window_pane *,
int window_pane_visible(struct window_pane *);
char *window_pane_search(
struct window_pane *, const char *, u_int *);
char *window_printable_flags(struct session *, struct winlink *);
struct window_pane *window_pane_find_up(struct window_pane *);
struct window_pane *window_pane_find_down(struct window_pane *);
struct window_pane *window_pane_find_left(struct window_pane *);

View File

@ -463,6 +463,32 @@ window_destroy_panes(struct window *w)
}
}
/* Return list of printable window flag symbols. No flags is just a space. */
char *
window_printable_flags(struct session *s, struct winlink *wl)
{
char flags[BUFSIZ];
int pos;
pos = 0;
if (wl->flags & WINLINK_ACTIVITY)
flags[pos++] = '#';
if (wl->flags & WINLINK_BELL)
flags[pos++] = '!';
if (wl->flags & WINLINK_CONTENT)
flags[pos++] = '+';
if (wl->flags & WINLINK_SILENCE)
flags[pos++] = '~';
if (wl == s->curw)
flags[pos++] = '*';
if (wl == TAILQ_FIRST(&s->lastw))
flags[pos++] = '-';
if (pos == 0)
flags[pos++] = ' ';
flags[pos] = '\0';
return (xstrdup(flags));
}
struct window_pane *
window_pane_create(struct window *w, u_int sx, u_int sy, u_int hlimit)
{