=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/tty-acs.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- src/usr.bin/tmux/tty-acs.c 2016/10/03 22:52:11 1.5 +++ src/usr.bin/tmux/tty-acs.c 2017/05/15 16:44:04 1.6 @@ -1,4 +1,4 @@ -/* $OpenBSD: tty-acs.c,v 1.5 2016/10/03 22:52:11 nicm Exp $ */ +/* $OpenBSD: tty-acs.c,v 1.6 2017/05/15 16:44:04 nicm Exp $ */ /* * Copyright (c) 2010 Nicholas Marriott @@ -74,23 +74,48 @@ 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);