Die Manpage sagt zu der Umgebungsvariablen:
NCURSES_NO_UTF8_ACS
During initialization, the ncurses library checks for special
cases where VT100 line-drawing (and the corresponding alternate
character set capabilities) described in the terminfo are known
to be missing. [...]
For other special cases, you should set this environment vari‐
able. Doing this tells ncurses to use Unicode values which
correspond to the VT100 line-drawing glyphs. [...]
VT100-ähnliche Terminals kennen ein „alternate charset“. Mit einer Escape-Sequenz kann man das aktivieren. Wenn man dann zum Beispiel ein „m“ (also ein Byte mit dem Wert 0x6D
) ans Terminal schickt, dann stellt das Terminal kein „m“ dar sondern einen „box drawing character“.
Kann man ausprobieren (an einem „echten“ Terminal, was eben dieses ACS unterstützt):
$ echo {a..z}; tput smacs; echo {a..z}; tput rmacs
a b c d e f g h i j k l m n o p q r s t u v w x y z
▒ ␉ ␌ ␍ ␊ ° ±  ␋ ┘ ┐ ┌ └ ┼ ⎺ ⎻ ─ ⎼ ⎽ ├ ┤ ┴ ┬ │ ≤ ≥
$ tput smacs; echo qqqqqqqqqqqqqqqqqqqqqqqqq; tput rmacs
─────────────────────────
Wenn das Setzen der Variable bei Putty also hilft, würde das suggerieren, dass Putty kein „alternate charset“ unterstützt. Statt einer horizontalen Linie würde es dann nur besagte „q“ darstellen.
Ist die Variable entsprechend gesetzt, benutzt ncurses statt des ACS direkt Unicode/UTF-8. Das geht, weil in Unicode diese ganzen „box drawing characters“ auch nochmal enthalten sind: https://en.wikipedia.org/wiki/Box_Drawing
(So verstehe ich die Manpage zumindest. Die Variable ist irgendwie wunderlich benannt. „NCURSES_NO_UTF8_ACS“. Auf was bezieht sich da jetzt das „no“? Auf UTF-8? Auf ACS? Äh …)