From 167a8c9edc2f3faf0613b0aa6a2b3bc92ebdf814 Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Sun, 9 Aug 2009 17:40:17 +0000 Subject: [PATCH] Sync OpenBSD patchset 229: Options to set the colours and attributes for status-left/-right. From Thomas Adam, thanks. --- cmd-set-option.c | 8 +++++++- status.c | 36 ++++++++++++++++++++++++++++++++---- tmux.1 | 16 ++++++++++++++-- tmux.c | 12 +++++++++--- 4 files changed, 62 insertions(+), 10 deletions(-) diff --git a/cmd-set-option.c b/cmd-set-option.c index b04fd6ea..cddf62db 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-option.c,v 1.72 2009-08-09 16:48:34 tcunha Exp $ */ +/* $Id: cmd-set-option.c,v 1.73 2009-08-09 17:40:17 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -74,8 +74,14 @@ const struct set_option_entry set_option_table[] = { SET_OPTION_CHOICE, 0, 0, set_option_status_justify_list }, { "status-keys", SET_OPTION_CHOICE, 0, 0, set_option_status_keys_list }, { "status-left", SET_OPTION_STRING, 0, 0, NULL }, + { "status-left-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL }, + { "status-left-bg", SET_OPTION_COLOUR, 0, 0, NULL }, + { "status-left-fg", SET_OPTION_COLOUR, 0, 0, NULL }, { "status-left-length", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL }, { "status-right", SET_OPTION_STRING, 0, 0, NULL }, + { "status-right-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL }, + { "status-right-bg", SET_OPTION_COLOUR, 0, 0, NULL }, + { "status-right-fg", SET_OPTION_COLOUR, 0, 0, NULL }, { "status-right-length", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL }, { "status-utf8", SET_OPTION_FLAG, 0, 0, NULL }, { "terminal-overrides", SET_OPTION_STRING, 0, 0, NULL }, diff --git a/status.c b/status.c index 16d23765..850c513a 100644 --- a/status.c +++ b/status.c @@ -1,4 +1,4 @@ -/* $Id: status.c,v 1.108 2009-08-09 16:50:57 tcunha Exp $ */ +/* $Id: status.c,v 1.109 2009-08-09 17:40:17 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -47,8 +47,10 @@ status_redraw(struct client *c) char *left, *right, *text, *ptr; size_t llen, llen2, rlen, rlen2, offset; size_t ox, xx, yy, size, start, width; - struct grid_cell stdgc, gc; + struct grid_cell stdgc, sl_stdgc, sr_stdgc, gc; int larrow, rarrow, utf8flag; + int sl_fg, sl_bg, sr_fg, sr_bg; + int sl_attr, sr_attr; left = right = NULL; @@ -68,6 +70,32 @@ status_redraw(struct client *c) stdgc.bg = options_get_number(&s->options, "status-bg"); stdgc.attr |= options_get_number(&s->options, "status-attr"); + /* + * Set the status-left and status-right parts to the default status + * line options and only change them where they differ from the + * defaults. + */ + memcpy(&sl_stdgc, &stdgc, sizeof sl_stdgc); + memcpy(&sr_stdgc, &stdgc, sizeof sr_stdgc); + sl_fg = options_get_number(&s->options, "status-left-fg"); + if (sl_fg != 8) + sl_stdgc.fg = sl_fg; + sl_bg = options_get_number(&s->options, "status-left-bg"); + if (sl_bg != 8) + sl_stdgc.bg = sl_bg; + sl_attr = options_get_number(&s->options, "status-left-attr"); + if (sl_attr != 0) + sl_stdgc.attr = sl_attr; + sr_fg = options_get_number(&s->options, "status-right-fg"); + if (sr_fg != 8) + sr_stdgc.fg = sr_fg; + sr_bg = options_get_number(&s->options, "status-right-bg"); + if (sr_bg != 8) + sr_stdgc.bg = sr_bg; + sr_attr = options_get_number(&s->options, "status-right-attr"); + if (sr_attr != 0) + sr_stdgc.attr = sr_attr; + yy = c->tty.sy - 1; if (yy == 0) goto blank; @@ -164,7 +192,7 @@ draw: screen_write_start(&ctx, NULL, &c->status); if (llen != 0) { screen_write_cursormove(&ctx, 0, yy); - screen_write_nputs(&ctx, llen, &stdgc, utf8flag, "%s", left); + screen_write_nputs(&ctx, llen, &sl_stdgc, utf8flag, "%s", left); screen_write_putc(&ctx, &stdgc, ' '); if (larrow) screen_write_putc(&ctx, &stdgc, ' '); @@ -238,7 +266,7 @@ draw: if (rlen != 0) { screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, yy); screen_write_putc(&ctx, &stdgc, ' '); - screen_write_nputs(&ctx, rlen, &stdgc, utf8flag, "%s", right); + screen_write_nputs(&ctx, rlen, &sr_stdgc, utf8flag, "%s", right); } /* Draw the arrows. */ diff --git a/tmux.1 b/tmux.1 index 89ce74cb..b8088887 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1,4 +1,4 @@ -.\" $Id: tmux.1,v 1.143 2009-08-09 17:19:18 tcunha Exp $ +.\" $Id: tmux.1,v 1.144 2009-08-09 17:40:17 tcunha Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: August 7 2009 $ +.Dd $Mdocdate: August 8 2009 $ .Dt TMUX 1 .Os .Sh NAME @@ -1238,6 +1238,12 @@ By default, UTF-8 in is not interpreted, to enable UTF-8, use the .Ic status-utf8 option. +.It Ic status-left-attr Ar attributes +Set the attribute of the left part of the status line. +.It Ic status-left-fg Ar colour +Set the foreground colour of the left part of the status line. +.It Ic status-left-bg Ar colour +Set the background colour of the left part of the status line. .It Ic status-left-length Ar length Set the maximum .Ar length @@ -1256,6 +1262,12 @@ will be passed to character pairs are replaced, and UTF-8 is dependent on the .Ic status-utf8 option. +.It Ic status-right-attr Ar attributes +Set the attribute of the right part of the status line. +.It Ic status-right-fg Ar colour +Set the foreground colour of the right part of the status line. +.It Ic status-right-bg Ar colour +Set the background colour of the right part of the status line. .It Ic status-right-length Ar length Set the maximum .Ar length diff --git a/tmux.c b/tmux.c index f082dfb9..69826d35 100644 --- a/tmux.c +++ b/tmux.c @@ -1,4 +1,4 @@ -/* $Id: tmux.c,v 1.156 2009-08-09 16:50:57 tcunha Exp $ */ +/* $Id: tmux.c,v 1.157 2009-08-09 17:40:17 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -368,11 +368,17 @@ main(int argc, char **argv) options_set_number(&global_s_options, "status-interval", 15); options_set_number(&global_s_options, "status-keys", MODEKEY_EMACS); options_set_number(&global_s_options, "status-justify", 0); - options_set_number(&global_s_options, "status-left-length", 10); - options_set_number(&global_s_options, "status-right-length", 40); options_set_string(&global_s_options, "status-left", "[#S]"); + options_set_number(&global_s_options, "status-left-attr", 0); + options_set_number(&global_s_options, "status-left-fg", 8); + options_set_number(&global_s_options, "status-left-bg", 8); + options_set_number(&global_s_options, "status-left-length", 10); options_set_string( &global_s_options, "status-right", "\"#22T\" %%H:%%M %%d-%%b-%%y"); + options_set_number(&global_s_options, "status-right-attr", 0); + options_set_number(&global_s_options, "status-right-fg", 8); + options_set_number(&global_s_options, "status-right-bg", 8); + options_set_number(&global_s_options, "status-right-length", 40); if (flags & IDENTIFY_UTF8) options_set_number(&global_s_options, "status-utf8", 1); else