1

单色应用程序是否支持 256 色终端?

我的程序在 256 色环境中给出了非常奇怪的输出。

如果它是 256 色,我应该只检查 $TERM 值并完全禁用颜色吗?

我的输出如下所示:

1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t31%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;1%;mYou have not registered
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t31%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;1%;mMOTD File is missing
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t30%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;0%;mThetis joined #sanctuary.
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved.
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved.
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t30%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;0%;mChanMess 77 and still going...
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved.
1%{8}%<%t37%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;7%;m1%{8}%<%t36%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;6%;mPlugin - Factoids - Saved.
4

2 回答 2

2

显然是一个很晚的反应,但我也遇到了这个问题,并且在搜索它时,唯一出现的相关结果就是这个问题。

我最终自己弄明白了——原来$TERM环境变量设置不正确。就我而言,它设置为xterm-256color. Mono 显然不喜欢这样。

将其设置为xterm将解决问题。

于 2015-02-04T15:03:02.223 回答
1

阅读源代码TermInfoDriver.cs显示 Mono 首先尝试在 terminfo 数据库中查找 $TERM,如果失败则硬编码为接受“xterm”或“linux”。如果在 terminfo 数据库中未找到 $TERM,或者如果 Mono 被错误地配置为查找 terminfo 数据库,则会发生故障。要检查前者,请使用“infocmp”显示终端条目。

“标准 linux 终端”将是 Linux 控制台,它与“xterm”或“vt220”(它们不同)都不能很好地使用。同样,使用 infocmp 查看,例如infocmp linux xterminfocmp linux vt220

回到最初的问题:打印出来的奇怪文本来自 terminfo 数据库。为使用数据库而编写的应用程序通常使用 terminfo 函数来解释数据并准备将其输出到终端。Mono 有自己的 terminfo 字符串解释器(可能正常工作),我记得有一些评论说它也有自己的终端仿真器(显示)。这些程序对他们不希望处理的字符串做奇怪的事情并不罕见,包括打印错误消息。“真正的”硬件终端通常会简单地忽略意外输入。

于 2015-02-04T21:53:25.777 回答