summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2009-06-26 15:13:40 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2009-06-26 15:13:40 +0000
commitfc4c122129c4d2da0ff29b5f5ca69c6a324c13c6 (patch)
tree30e411067b07744f91acc70af0cb5b8a1b956302
parent0fcb8707b5be671dd4ae8de7278040d06c479451 (diff)
Status line fixes: don't truncate status-right now the length calculation is
done for UTF-8, limit to the maximum length correctly when printing, and always print a space even if the left string is longer than the width available.
-rw-r--r--usr.bin/tmux/screen-write.c4
-rw-r--r--usr.bin/tmux/status.c11
2 files changed, 7 insertions, 8 deletions
diff --git a/usr.bin/tmux/screen-write.c b/usr.bin/tmux/screen-write.c
index cf0d545b24a..ea3c2473f1b 100644
--- a/usr.bin/tmux/screen-write.c
+++ b/usr.bin/tmux/screen-write.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-write.c,v 1.7 2009/06/05 03:13:16 ray Exp $ */
+/* $OpenBSD: screen-write.c,v 1.8 2009/06/26 15:13:39 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -164,7 +164,7 @@ screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
gc->flags &= ~GRID_FLAG_UTF8;
} else {
- if (maxlen > 0 && size > (size_t) maxlen)
+ if (maxlen > 0 && size + 1 > (size_t) maxlen)
break;
size++;
diff --git a/usr.bin/tmux/status.c b/usr.bin/tmux/status.c
index 4c797e28554..ab57738aec4 100644
--- a/usr.bin/tmux/status.c
+++ b/usr.bin/tmux/status.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: status.c,v 1.4 2009/06/04 21:43:24 nicm Exp $ */
+/* $OpenBSD: status.c,v 1.5 2009/06/26 15:13:39 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -91,7 +91,6 @@ status_redraw(struct client *c)
rlen2 = screen_write_strlen(utf8flag, "%s", right);
if (rlen2 < rlen)
rlen = rlen2;
- right[rlen] = '\0';
/*
* Figure out how much space we have for the window list. If there isn't
@@ -167,8 +166,8 @@ draw:
screen_write_start(&ctx, NULL, &c->status);
if (llen != 0) {
screen_write_cursormove(&ctx, 0, yy);
- screen_write_nputs(
- &ctx, llen + 1, &stdgc, utf8flag, "%s ", left);
+ screen_write_nputs(&ctx, llen, &stdgc, utf8flag, "%s", left);
+ screen_write_putc(&ctx, &stdgc, ' ');
if (larrow)
screen_write_putc(&ctx, &stdgc, ' ');
} else {
@@ -225,8 +224,8 @@ draw:
/* Draw the last item. */
if (rlen != 0) {
screen_write_cursormove(&ctx, c->tty.sx - rlen - 1, yy);
- screen_write_nputs(
- &ctx, rlen + 1, &stdgc, utf8flag, " %s", right);
+ screen_write_putc(&ctx, &stdgc, ' ');
+ screen_write_nputs(&ctx, rlen, &stdgc, utf8flag, "%s", right);
}
/* Draw the arrows. */