From 30f6d9b167907783122869100046954e52c07694 Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Fri, 7 Jan 2011 16:55:40 +0000 Subject: [PATCH] Sync OpenBSD patchset 813: Add a function to create window flags rather than doing the same thing in two places. From Thomas Adam. --- cmd-choose-window.c | 25 +++++++------------------ status.c | 19 +++---------------- tmux.h | 4 +++- window.c | 28 +++++++++++++++++++++++++++- 4 files changed, 40 insertions(+), 36 deletions(-) diff --git a/cmd-choose-window.c b/cmd-choose-window.c index 04360ec4..dce71c1a 100644 --- a/cmd-choose-window.c +++ b/cmd-choose-window.c @@ -1,4 +1,4 @@ -/* $Id: cmd-choose-window.c,v 1.25 2011-01-07 14:45:33 tcunha Exp $ */ +/* $Id: cmd-choose-window.c,v 1.26 2011-01-07 16:55:40 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -56,7 +56,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) { @@ -79,20 +79,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; @@ -102,10 +89,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); diff --git a/status.c b/status.c index b694068a..9c29c818 100644 --- a/status.c +++ b/status.c @@ -1,4 +1,4 @@ -/* $Id: status.c,v 1.154 2011-01-07 14:32:26 tcunha Exp $ */ +/* $Id: status.c,v 1.155 2011-01-07 16:55:40 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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 '[': /* diff --git a/tmux.h b/tmux.h index 7223354c..63790eb3 100644 --- a/tmux.h +++ b/tmux.h @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.602 2011-01-07 14:45:34 tcunha Exp $ */ +/* $Id: tmux.h,v 1.603 2011-01-07 16:55:40 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1873,6 +1873,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 *); diff --git a/window.c b/window.c index 1942e040..0fdc1171 100644 --- a/window.c +++ b/window.c @@ -1,4 +1,4 @@ -/* $Id: window.c,v 1.142 2010-12-06 22:52:21 nicm Exp $ */ +/* $Id: window.c,v 1.143 2011-01-07 16:55:40 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -460,6 +460,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) {