diff --git a/utf8.c b/utf8.c index 54cea671..421c0fea 100644 --- a/utf8.c +++ b/utf8.c @@ -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);