Joe*_*Joe 6 ncurses console text-user-interface
我正在尝试在 Fedora 12 上使用 Curses 将状态信息输出到 VT(按Ctrl+ Alt+可以访问的终端之一Fx)。
当我的VT(一开始我的应用程序$TERM=linux
)的箱线出来的人物,如j
,q
,k
和一些其他字符。然而,当我在终端窗口 ( $TERM=xterm
) 中启动它时,一切都按原样显示。
有人可以向我解释我需要做什么才能使 VT 输出显示为 xterm?是否有我可以从我的程序中设置的终端设置以使输出正确?
来自 ncurses 常见问题解答http://invisible-island.net/ncurses/ncurses.faq.html
画线字符显示为 x 和 q
x 和 q 对应于一个表(来自 terminfo/termcap),该表告诉 ncurses 如何将“备用”字符集映射到终端的图形字符集。该表的参考来自 vt100。如果出现未映射的字符,则终端仿真器无法识别 terminfo 描述中给出的用于在正常字体和备用字体之间切换的转义序列。
有几种情况值得注意:
- 使用不同的转义序列或不同的范围来映射结果字符的终端模拟器。例如所谓的 vt100 兼容产品,如 Linux 控制台和 Tera Term。
- 区域设置敏感的终端模拟器。同样,Linux 控制台在 UTF-8 模式下运行时也是一个问题区域,因为忽略处理字体的转义序列会进一步削弱其名义上的 vt100 兼容性。screen实用程序也有同样的问题;无论是为了简化实现还是复制 Linux 控制台,当语言环境为 UTF-8 风格时,它都会忽略 vt100 风格的字体切换。
- 如果您碰巧使用 Solaris,则通常将其配置为优先使用其终端数据库而不是 ncurses,即使安装了 ncurses 也是如此。然而,它的 xterm 终端描述省略了用于启用画线的 enacs。这对于 screen 和 luit 等应用程序来说效果不佳。
对于第一种情况,您只需找到正确的 terminfo 描述即可。修复后者比较困难,因为损坏是在 ncurses 之外造成的。(尽管可以轻松地使事物足够兼容,从而使这一特定问题永远不会出现,但某些编码人员认为这种解决方案风格并不合适)。
普通的 ncurses 库支持 8 位字符。ncurses 库还可以配置(--enable-widec)以支持宽字符(例如 Unicode 和 UTF-8 编码)。相应的宽字符 ncursesw 库与普通应用程序源兼容。也就是说,应用程序必须针对 ncursesw 库进行编译和链接。
ncurses 5.3 版本提供 UTF-8 支持。Linux 控制台和屏幕的特殊情况已在 2002 年底完成的开发补丁中得到解决。