diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-06-03 16:05:46 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-06-03 16:05:46 +0000 |
commit | 7d45e29683119b31179295b3712142ebf8897a0d (patch) | |
tree | 28dc49e1fe895cb7d1bd472126b201eaeb534460 /status.c | |
parent | 41d985ace3189c7375a8f1c2d1d2d028a20cf731 (diff) | |
download | rtmux-7d45e29683119b31179295b3712142ebf8897a0d.tar.gz rtmux-7d45e29683119b31179295b3712142ebf8897a0d.tar.bz2 rtmux-7d45e29683119b31179295b3712142ebf8897a0d.zip |
Add a UTF-8 aware string length function and make UTF-8 in
status-left/status-right work properly. At the moment any top-bit-set
characters are assumed to be UTF-8: a status-utf8 option to configure this will
come shortly.
Diffstat (limited to 'status.c')
-rw-r--r-- | status.c | 19 |
1 files changed, 10 insertions, 9 deletions
@@ -47,8 +47,8 @@ status_redraw(struct client *c) struct window_pane *wp; struct screen *sc = NULL, old_status; char *left, *right, *text, *ptr; - size_t llen, rlen, offset, xx, yy, sy; - size_t size, start, width; + size_t llen, llen2, rlen, rlen2, offset; + size_t xx, yy, sy, size, start, width; struct grid_cell stdgc, gc; int larrow, rarrow; @@ -78,15 +78,16 @@ 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"); - if (strlen(left) < llen) - llen = strlen(left); - left[llen] = '\0'; + llen2 = screen_write_strlen("%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"); - if (strlen(right) < rlen) - rlen = strlen(right); + rlen2 = screen_write_strlen("%s", right); + if (rlen2 < rlen) + rlen = rlen2; right[rlen] = '\0'; /* @@ -163,7 +164,7 @@ draw: screen_write_start(&ctx, NULL, &c->status); if (llen != 0) { screen_write_cursormove(&ctx, 0, yy); - screen_write_puts(&ctx, &stdgc, "%s ", left); + screen_write_nputs(&ctx, llen + 1, &stdgc, "%s ", left); if (larrow) screen_write_putc(&ctx, &stdgc, ' '); } else { @@ -220,7 +221,7 @@ draw: /* Draw the last item. */ if (rlen != 0) { screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, yy); - screen_write_puts(&ctx, &stdgc, " %s", right); + screen_write_nputs(&ctx, rlen + 1, &stdgc, " %s", right); } /* Draw the arrows. */ |