aboutsummaryrefslogtreecommitdiff
path: root/status.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-09-07 10:49:32 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-09-07 10:49:32 +0000
commite97006b102dd274dd8cc70c2aee13f6b09f69a41 (patch)
treee251c8fe3ba0b57ad365807ba4fa3a06460ccc78 /status.c
parentffab22bb35a990a72f3a13c9729680c01e23a727 (diff)
downloadrtmux-e97006b102dd274dd8cc70c2aee13f6b09f69a41.tar.gz
rtmux-e97006b102dd274dd8cc70c2aee13f6b09f69a41.tar.bz2
rtmux-e97006b102dd274dd8cc70c2aee13f6b09f69a41.zip
Permit embedded colour and attributes in status-left and status-right using new
#[] special characters, for example #[fg=red,bg=blue,blink].
Diffstat (limited to 'status.c')
-rw-r--r--status.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/status.c b/status.c
index f0e7ce62..5e696afb 100644
--- a/status.c
+++ b/status.c
@@ -107,14 +107,14 @@ status_redraw(struct client *c)
left = status_replace(s, options_get_string(
&s->options, "status-left"), c->status_timer.tv_sec);
llen = options_get_number(&s->options, "status-left-length");
- llen2 = screen_write_strlen(utf8flag, "%s", left);
+ llen2 = screen_write_cstrlen(utf8flag, "%s", left);
if (llen2 < llen)
llen = llen2;
right = status_replace(s, options_get_string(
&s->options, "status-right"), c->status_timer.tv_sec);
rlen = options_get_number(&s->options, "status-right-length");
- rlen2 = screen_write_strlen(utf8flag, "%s", right);
+ rlen2 = screen_write_cstrlen(utf8flag, "%s", right);
if (rlen2 < rlen)
rlen = rlen2;
@@ -192,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, &sl_stdgc, utf8flag, "%s", left);
+ screen_write_cnputs(&ctx, llen, &sl_stdgc, utf8flag, "%s", left);
screen_write_putc(&ctx, &stdgc, ' ');
if (larrow)
screen_write_putc(&ctx, &stdgc, ' ');
@@ -266,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, &sr_stdgc, utf8flag, "%s", right);
+ screen_write_cnputs(&ctx, rlen, &sr_stdgc, utf8flag, "%s", right);
}
/* Draw the arrows. */
@@ -400,6 +400,20 @@ status_replace(struct session *s, const char *fmt, time_t t)
len--;
}
break;
+ case '[':
+ /*
+ * Embedded style, handled at display time.
+ * Leave present and skip input until ].
+ */
+ *optr++ = '#';
+
+ iptr--; /* include [ */
+ while (*iptr != ']' && *iptr != '\0') {
+ if (optr >= out + (sizeof out) - 1)
+ break;
+ *optr++ = *iptr++;
+ }
+ break;
case '#':
*optr++ = '#';
break;