Don't send zero-width characters to ncurses
parent
b352f5965b
commit
88e2197a8f
15
ui.c
15
ui.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue