Count width of 2 for invalid multibyte with high bit
parent
8d57d700a5
commit
bf70fcbfed
9
buffer.c
9
buffer.c
|
@ -123,17 +123,18 @@ static int flow(struct Lines *hard, int cols, const struct Line *soft) {
|
||||||
int n = mbtowc(&wc, str, len);
|
int n = mbtowc(&wc, str, len);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
n = 1;
|
n = 1;
|
||||||
width++;
|
// ncurses will render these as "~A".
|
||||||
|
width += (*str & '\200' ? 2 : 1);
|
||||||
} else if (wc == ZWS || wc == ZWNJ) {
|
} else if (wc == ZWS || wc == ZWNJ) {
|
||||||
// XXX: ncurses likes to render these as spaces when they should be
|
// ncurses likes to render these as spaces when they should be
|
||||||
// zero-width, so just remove them entirely.
|
// zero-width, so just remove them entirely.
|
||||||
memmove(str, &str[n], strlen(&str[n]) + 1);
|
memmove(str, &str[n], strlen(&str[n]) + 1);
|
||||||
continue;
|
continue;
|
||||||
} else if (wc == L'\t') {
|
} else if (wc == L'\t') {
|
||||||
// XXX: Assuming TABSIZE = 8.
|
// Assuming TABSIZE = 8.
|
||||||
width += 8 - (width % 8);
|
width += 8 - (width % 8);
|
||||||
} else if (wc < L' ' || wc == L'\177') {
|
} else if (wc < L' ' || wc == L'\177') {
|
||||||
// XXX: ncurses will render these as "^A".
|
// ncurses will render these as "^A".
|
||||||
width += 2;
|
width += 2;
|
||||||
} else if (wcwidth(wc) > 0) {
|
} else if (wcwidth(wc) > 0) {
|
||||||
width += wcwidth(wc);
|
width += wcwidth(wc);
|
||||||
|
|
Loading…
Reference in New Issue