summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-05-26 15:18:55 -0400
committerJune McEnroe <june@causal.agency>2020-05-26 15:18:55 -0400
commit88e2197a8f3272abbdc9a322806a7bdc9fff2daa (patch)
tree60fefa9dc937064f3b14e45cc1e6c7511ae95506
parentDefine constants for window geometry (diff)
downloadcatgirl-88e2197a8f3272abbdc9a322806a7bdc9fff2daa.tar.gz
catgirl-88e2197a8f3272abbdc9a322806a7bdc9fff2daa.zip
Don't send zero-width characters to ncurses
Diffstat (limited to '')
-rw-r--r--ui.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/ui.c b/ui.c
index 5b7ef5e..fd9bfab 100644
--- a/ui.c
+++ b/ui.c
@@ -563,6 +563,19 @@ static int wordWidth(const char *str) {
 	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) {
 	int y, x, width;
 	getmaxyx(win, y, width);
@@ -601,7 +614,7 @@ static int wordWrap(WINDOW *win, const char *str) {
 			colorPair(Colors[style.fg], Colors[style.bg]),
 			NULL
 		);
-		waddnstr(win, str, len);
+		waddnstrnzw(win, str, len);
 		str += len;
 	}
 	return lines;
akefile?h=1.4.1&id=c543d7dbf6bf7c8be5af829bf1d3eab494856ee0&follow=1'>Makefile: make "git/config.mak.uname" inclusion optionalJohn Keeping 2015-08-13ui-shared: show full date in tooltip if longer ago than max_relativeJohn Keeping 2015-08-13ui-shared: use common function in print_rel_date()John Keeping 2015-08-13ui-shared: extract date formatting to a functionJohn Keeping 2015-08-13filter: don't use dlsym unnecessarilyJohn Keeping 2015-08-13ui-tree: use "sane" isgraph()John Keeping 2015-08-13cgit.h: move stdbool.h from ui-shared.hJohn Keeping 2015-08-13cache.c: fix header orderJohn Keeping 2015-08-13configfile.c: don't include system headers directlyJohn Keeping 2015-08-13Remove redundant includesJohn Keeping 2015-08-13Makefile: include Git's config.mak.unameJohn Keeping 2015-08-13tests: allow shell to be overriddenJohn Keeping 2015-08-13redirect: cleanlinessJason A. Donenfeld 2015-08-13redirect: be more careful for different cgi setupsJason A. Donenfeld 2015-08-12ui-log: fix double countingJohn Keeping 2015-08-12log: allow users to follow a fileJohn Keeping 2015-08-12shared: make cgit_diff_tree_cb publicJohn Keeping 2015-08-12t0110: Chain together using &&Jason A. Donenfeld 2015-08-12about: always ensure page has a trailing slashJason A. Donenfeld 2015-08-12filters: apply HTML escapingLazaros Koromilas 2015-08-12git: update to v2.5.0Christian Hesse 2015-08-12Fix processing of repo.hide and repo.ignoreDaniel Reichelt