summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/tty.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2009-10-20 17:33:34 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2009-10-20 17:33:34 +0000
commitd89b749326b0670ac53e05f47aa31d57775fcafa (patch)
tree9cf5d1cc8cc90259d71b0a3428953022adb590e5 /usr.bin/tmux/tty.c
parent7ca7f75f02ff9e27a8d6213d9a633327c5586e4c (diff)
UTF-8 combined character fixes.
Thai can have treble combinations (1 x width=1 then 2 x width=0) so bump the UTF-8 cell data size to 9 and alter the code to allow this. Also break off the combining code into a separate function, handle any further combining beyond the buffer size by replacing the character with _s, and when redrawing the UTF-8 character don't assume the first part has just been printed, redraw the entire line.
Diffstat (limited to 'usr.bin/tmux/tty.c')
-rw-r--r--usr.bin/tmux/tty.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c
index d2d1490adb6..bba5c95b281 100644
--- a/usr.bin/tmux/tty.c
+++ b/usr.bin/tmux/tty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.52 2009/10/20 16:32:23 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.53 2009/10/20 17:33:33 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -874,14 +874,13 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx)
void
tty_cmd_utf8character(struct tty *tty, const struct tty_ctx *ctx)
{
- u_char *ptr = ctx->ptr;
- size_t i;
+ struct window_pane *wp = ctx->wp;
- for (i = 0; i < UTF8_SIZE; i++) {
- if (ptr[i] == 0xff)
- break;
- tty_putc(tty, ptr[i]);
- }
+ /*
+ * Cannot rely on not being a partial character, so just redraw the
+ * whole line.
+ */
+ tty_draw_line(tty, wp->screen, ctx->ocy, wp->xoff, wp->yoff);
}
void