Don't send zero-width characters to ncurses

master
C. McEnroe 2020-05-26 15:18:55 -04:00
parent b352f5965b
commit 88e2197a8f
1 changed files with 14 additions and 1 deletions

15
ui.c
View File

@ -563,6 +563,19 @@ static int wordWidth(const char *str) {
return width; return width;
} }
// XXX: ncurses likes to render zero-width characters as spaces...
static int waddnstrnzw(WINDOW *win, const char *str, int len) {
wchar_t wc;
while (len) {
int n = mbtowc(&wc, str, len);
if (n < 1) return waddnstr(win, str, len);
if (wcwidth(wc)) waddnstr(win, str, n);
str += n;
len -= n;
}
return OK;
}
static int wordWrap(WINDOW *win, const char *str) { static int wordWrap(WINDOW *win, const char *str) {
int y, x, width; int y, x, width;
getmaxyx(win, y, width); getmaxyx(win, y, width);
@ -601,7 +614,7 @@ static int wordWrap(WINDOW *win, const char *str) {
colorPair(Colors[style.fg], Colors[style.bg]), colorPair(Colors[style.fg], Colors[style.bg]),
NULL NULL
); );
waddnstr(win, str, len); waddnstrnzw(win, str, len);
str += len; str += len;
} }
return lines; return lines;