diff options
Diffstat (limited to 'utf8.c')
-rw-r--r-- | utf8.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -21,7 +21,6 @@ #include <errno.h> #include <stdlib.h> #include <string.h> -#include <vis.h> #include <wchar.h> #include "tmux.h" @@ -113,6 +112,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); |