Trying to predict the cursor position for UTF-8 output in the same way as for

normal eight-bit output is wrong, separate it into a different function. Fixes
spacing when mixing UTF-8 with some escape sequences, notably the way w3m does
it.
This commit is contained in:
Nicholas Marriott 2009-06-24 16:01:02 +00:00
parent 7b4077ef87
commit 2de599ac0e
2 changed files with 19 additions and 5 deletions

1
tmux.h
View File

@ -994,6 +994,7 @@ void tty_putcode1(struct tty *, enum tty_code_code, int);
void tty_putcode2(struct tty *, enum tty_code_code, int, int); void tty_putcode2(struct tty *, enum tty_code_code, int, int);
void tty_puts(struct tty *, const char *); void tty_puts(struct tty *, const char *);
void tty_putc(struct tty *, u_char); void tty_putc(struct tty *, u_char);
void tty_pututf8(struct tty *, const struct grid_utf8 *);
void tty_init(struct tty *, char *, char *); void tty_init(struct tty *, char *, char *);
void tty_start_tty(struct tty *); void tty_start_tty(struct tty *);
void tty_stop_tty(struct tty *); void tty_stop_tty(struct tty *);

23
tty.c
View File

@ -408,6 +408,23 @@ tty_putc(struct tty *tty, u_char ch)
write(tty->log_fd, &ch, 1); write(tty->log_fd, &ch, 1);
} }
void
tty_pututf8(struct tty *tty, const struct grid_utf8 *gu)
{
u_int i, width;
for (i = 0; i < UTF8_SIZE; i++) {
if (gu->data[i] == 0xff)
break;
buffer_write8(tty->out, gu->data[i]);
if (tty->log_fd != -1)
write(tty->log_fd, &gu->data[i], 1);
}
width = utf8_width(gu->data);
tty->cx += width;
}
void void
tty_set_title(struct tty *tty, const char *title) tty_set_title(struct tty *tty, const char *title)
{ {
@ -912,11 +929,7 @@ tty_cell(
} }
/* Otherwise, write UTF-8. */ /* Otherwise, write UTF-8. */
for (i = 0; i < UTF8_SIZE; i++) { tty_pututf8(tty, gu);
if (gu->data[i] == 0xff)
break;
tty_putc(tty, gu->data[i]);
}
} }
void void