Only assume width 1 when wcwidth() returns -1 on non-OpenBSD platforms.

pull/390/head
Nicholas Marriott 2016-04-29 12:47:15 +01:00
parent a9d501e975
commit 65e4c57d3a
1 changed files with 14 additions and 0 deletions

14
utf8.c
View File

@ -118,6 +118,20 @@ utf8_width(wchar_t wc)
width = wcwidth(wc);
if (width < 0 || width > 0xff) {
log_debug("Unicode %04x, wcwidth() %d", wc, width);
#ifndef __OpenBSD__
/*
* Many platforms (particularly and inevitably OS X) have no
* width for relatively common characters (wcwidth() returns
* -1); assume width 1 in this case. This will be wrong for
* genuinely nonprintable characters, but they should be
* rare. We may pass through stuff that ideally we would block,
* but this is no worse than sending the same to the terminal
* without tmux.
*/
if (width < 0)
return (1);
#endif
return (-1);
}
return (width);