我正在用C开发一个ncurses应用程序。问题是putty会显示像ACS_VLINE这样的替代字符集字符作为字母。我的语言环境是
LANG=en_US.UTF-8
我已经设置了
export NCURSES_NO_UTF8_ACS=1
我还将putty设置为UTF-8并尝试了不同的字体。实际机器上的tty上的字符显示正常,所以我认为问题在于putty。我也尝试过连接ncursesw而不是ncurses。
答案 0 :(得分:5)
这是事物的组合。 PuTTY的推荐TERM
为"putty",但由于惯性,大多数人使用"xterm"。 xterm终端描述中的线条绘制支持与PuTTY的假设不同,因为xterm支持luit,这对备用字符集的管理方式有一些限制(参见{{3} }})。
如果使用infocmp
进行比较,您可能会看到这些行处理备用字符集:
acsc: '``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~', '``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~'.
enacs: NULL, '\E(B\E)0'.
rmacs: '\E(B', '^O'.
smacs: '\E(0', '^N'.
VT100s可以有两个字符集"指定为",称为G0和G1:
虽然两者都兼容VT100,但xterm方案不适用于PuTTY。由于与luit
的搭配,xterm
的正常终端描述不会更改(除非证明可以修改luit
以解决其用户的问题),因此解决方法PuTTY的用户需要:
使用推荐的其他终端说明,例如TERM=putty
。 PuTTY的设置对话框允许您设置环境变量以传递到远程计算机。
这有一个缺点,即由于" size"某些系统没有安装完整的ncurses终端数据库。 (在我的本地机器上是6.8Mb)。此外,TERM
可能不在允许的ssh环境变量列表中。
您可以使用ncurses编译自己的terminfo条目' tic,例如,
cat >foo <<"EOF"
xterm|my terminfo entry,
enacs=\E(B\E)0,
rmacs=^O,
smacs=^N,
use=xterm-new,
EOF
tic foo
使用GNU屏幕。它有自己的修复方法,恰好可以弥补PuTTY的问题。
进一步阅读
答案 1 :(得分:0)
我想补充一些内容。我遇到了同样的问题:Linux kenrel来源的许多基于ncurses的工具,例如dialog
,menuconfig
和nconfig
,即使mc
在使用ncurses构建时也会损坏(尽管{{1 }}是在许多操作系统上使用Slang构建的,并且不受影响。
这是发生了什么
ncurses使用terminfo中的mc
记录切换到“替代字符集”,然后使用smacs
绘制框。它发送acsc
,它是备用字符集(ACS)中的绘图字符。
这是VT100图形。
如今,某些终端仿真器在UTF-8中不支持ACS,因为应用程序能够发送真实的箱形绘图代码点。
a
中有一个非官方的功能U8
(大写的U!)告诉ncurses:“而不是ACS使用真实的箱形绘图代码点。”
我具有terminfo
的这项功能,还有腻子功能,但没有infocmp -x xterm-utf
的能力。
您可以在xterm
(https://invisible-island.net/ncurses/man/ncurses.3x.html)中看到,ncurses(3)
知道Linux控制台和GNU屏幕(以及tmux,它也将ncurses
用作{{1 }}),并且总是像设置了screen
一样。
对于其他在UTF中不支持ACS的终端,可以设置TERM
。
不幸的是,ncurses并不知道腻子。
还有U8
可以将ACS转换为Unicode点。
因此,这是我们可以在UTF-8中运行ncurses +油灰的方法:
使用具有NCURSES_NO_UTF8_ACS
功能的终端。这是为腻子设置的(顺便说一句,我建议改用luit
)。您可以使用U8#1
和putty-256color
创建自己的条目,并使用U8#1
进行编译。请注意,鼠标可能在不以colors#256
开头的终端上不起作用(请参阅tic -x
,“错误”部分)。这就是为什么我不使用xterm
终端的原因。我建议复制mouseinterval(3)
,添加putty
,进行编译并保持不变:它与腻子,鼠标和utf8完美结合。
您可以在个人资料中设置xterm-utf8
。
您可以运行colors#256
或NCURSES_NO_UTF8_ACS
:它将screen
设置为tmux
并修复TERM
您可以运行screen
:它将为您完成所有转换。
自腻子0.71起,您甚至可以要求腻子在utf-8中支持ACS图纸