diff options
author | nicm <nicm> | 2017-05-15 16:44:04 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-05-15 16:44:04 +0000 |
commit | 1ba7f1d03f680df20d45b5c2ca08ae39665e1dea (patch) | |
tree | f2845204d19836360ebe18619490119c30c33205 /tty-acs.c | |
parent | b160de5cb4cf901e0d01594308f8f4f54df9e2a9 (diff) | |
download | rtmux-1ba7f1d03f680df20d45b5c2ca08ae39665e1dea.tar.gz rtmux-1ba7f1d03f680df20d45b5c2ca08ae39665e1dea.tar.bz2 rtmux-1ba7f1d03f680df20d45b5c2ca08ae39665e1dea.zip |
Check the terminfo(5) U8 capability and disable using UTF-8 for ACS if
it is present and zero. This is useful for users with terminals or fonts
that do not correctly support UTF-8 line drawing characters. GitHub
issue 927, reported by Hiroaki Yamazoe and Akinori Hattori.
Diffstat (limited to 'tty-acs.c')
-rw-r--r-- | tty-acs.c | 37 |
1 files changed, 31 insertions, 6 deletions
@@ -74,23 +74,48 @@ tty_acs_cmp(const void *key, const void *value) return (ch - entry->key); } +/* Should this terminal use ACS instead of UTF-8 line drawing? */ +int +tty_acs_needed(struct tty *tty) +{ + if (tty == NULL) + return (0); + + /* + * If the U8 flag is present, it marks whether a terminal supports + * UTF-8 and ACS together. + * + * If it is present and zero, we force ACS - this gives users a way to + * turn off UTF-8 line drawing. + * + * If it is nonzero, we can fall through to the default and use UTF-8 + * line drawing on UTF-8 terminals. + */ + if (tty_term_has(tty->term, TTYC_U8) && + tty_term_number(tty->term, TTYC_U8) == 0) + return (1); + + if (tty->flags & TTY_UTF8) + return (0); + return (1); +} + /* Retrieve ACS to output as a string. */ const char * tty_acs_get(struct tty *tty, u_char ch) { - struct tty_acs_entry *entry; + struct tty_acs_entry *entry; - /* If not a UTF-8 terminal, use the ACS set. */ - if (tty != NULL && !(tty->flags & TTY_UTF8)) { + /* Use the ACS set instead of UTF-8 if needed. */ + if (tty_acs_needed(tty)) { if (tty->term->acs[ch][0] == '\0') return (NULL); return (&tty->term->acs[ch][0]); } /* Otherwise look up the UTF-8 translation. */ - entry = bsearch(&ch, - tty_acs_table, nitems(tty_acs_table), sizeof tty_acs_table[0], - tty_acs_cmp); + entry = bsearch(&ch, tty_acs_table, nitems(tty_acs_table), + sizeof tty_acs_table[0], tty_acs_cmp); if (entry == NULL) return (NULL); return (entry->string); |