diff options
author | June McEnroe <june@causal.agency> | 2021-01-09 17:28:42 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2021-01-09 17:28:42 -0500 |
commit | bf70fcbfedbe544a7e8dd1f444e8abe1bbd31da1 (patch) | |
tree | 3d4015a131f569b19b520f7c955bd231f649ecec /buffer.c | |
parent | Use execl rather than execlp for shell (diff) | |
download | catgirl-bf70fcbfedbe544a7e8dd1f444e8abe1bbd31da1.tar.gz catgirl-bf70fcbfedbe544a7e8dd1f444e8abe1bbd31da1.zip |
Count width of 2 for invalid multibyte with high bit
Diffstat (limited to 'buffer.c')
-rw-r--r-- | buffer.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/buffer.c b/buffer.c index 15d89f8..bdf9e3a 100644 --- a/buffer.c +++ b/buffer.c @@ -123,17 +123,18 @@ static int flow(struct Lines *hard, int cols, const struct Line *soft) { int n = mbtowc(&wc, str, len); if (n < 0) { n = 1; - width++; + // ncurses will render these as "~A". + width += (*str & '\200' ? 2 : 1); } 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. memmove(str, &str[n], strlen(&str[n]) + 1); continue; } else if (wc == L'\t') { - // XXX: Assuming TABSIZE = 8. + // Assuming TABSIZE = 8. width += 8 - (width % 8); } else if (wc < L' ' || wc == L'\177') { - // XXX: ncurses will render these as "^A". + // ncurses will render these as "^A". width += 2; } else if (wcwidth(wc) > 0) { width += wcwidth(wc); |