2012-10-19 48 views
1

單色應用程序是否支持256色終端?256色終端的單色控制檯應用程序

我的程序在256色環境中給出了非常奇怪的輸出。

我應該只檢查$ TERM值並完全禁用顏色,如果它的256色?

我的輸出是這樣的:

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. 
+0

...這應該在哪個環境下工作? –

+0

它在ansi彩色終端和windows中工作正常。我不修改顏色的輸出,我只是設置Console.ForegroundColor屬性。 – Steve

+0

「ansi彩色終端」? –

回答

2

顯然很晚的反應,但我有這個問題爲好,並同時尋找它,打開了唯一相關的結果是這個問題。

我終於明白了我自己 - 發現$TERM環境變量設置不正確。在我的情況下,它被設置爲xterm-256color。莫諾顯然不喜歡那樣。

將其設置爲xterm將解決該問題。

1

讀取源代碼TermInfoDriver.cs表明,Mono首先嚐試在terminfo數據庫中找到$ TERM,並且未通過硬編碼接受「xterm」或「linux」。如果在terminfo數據庫中未找到$ TERM,或者Mono未正確配置爲查找terminfo數據庫,則會發生故障。要檢查前者,請使用"infocmp"顯示終端條目。

「標準linux終端」將是Linux控制檯,並且它與「xterm」或「vt220」(它們不同)的匹配程度不夠好,無法使用。再次使用infocmp來查看,例如,infocmp linux xterm,infocmp linux vt220

回到原始問題:打印的奇數文本出自terminfo數據庫。使用數據庫通常編寫的應用程序使用terminfo函數來解釋數據並準備將其輸出到終端。單聲道有自己的terminfo字符串解釋器(它可以正常工作),我記得有一些評論說它也有自己的終端模擬器(顯示)。這些程序對於他們不希望處理的字符串做奇怪的事情並不罕見,包括打印錯誤信息。一個「真正的」硬件終端通常會忽略意外的輸入。

相關問題