256色终端的单声道控制台应用程序

时间:2012-10-19 17:10:25

标签: linux mono console terminal

单声道应用程序是否支持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.

2 个答案:

答案 0 :(得分:2)

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

我最终自己想出来了 - 结果$TERM环境变量设置不正确。就我而言,它被设置为xterm-256color。 Mono显然不喜欢这样。

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

答案 1 :(得分: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字符串解释器(可能正常工作),我记得有一些评论说它也有自己的终端模拟器(显示)。这些程序用他们不希望处理的字符串做奇怪的事情并不罕见,包括打印错误消息。 “真正的”硬件终端通常会忽略意外输入。