mirror of
https://github.com/tmux/tmux.git
synced 2024-11-16 17:39:09 +00:00
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:
parent
245685433e
commit
942ea4267d
3
tmux.h
3
tmux.h
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: tmux.h,v 1.7 2009/06/24 05:35:07 nicm Exp $ */
|
/* $OpenBSD: tmux.h,v 1.8 2009/06/24 16:01:02 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -1115,6 +1115,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 *);
|
||||||
|
25
tty.c
25
tty.c
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: tty.c,v 1.4 2009/06/03 23:30:40 nicm Exp $ */
|
/* $OpenBSD: tty.c,v 1.5 2009/06/24 16:01:02 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -418,6 +418,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)
|
||||||
{
|
{
|
||||||
@ -922,11 +939,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
|
||||||
|
Loading…
Reference in New Issue
Block a user