1

モノクロ アプリは 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.
4

2 に答える 2

2

明らかに非常に遅い反応ですが、私もこの問題を抱えていました。それを検索しているときに、関連する唯一の結果がこの質問でした.

私は最終的に自分でそれを理解しました-$TERM環境変数が正しく設定されていないことがわかりました。私の場合は、 に設定されていましたxterm-256color。モノはそれが気に入らないらしい。

に設定するxtermと問題が解決します。

于 2015-02-04T15:03:02.223 に答える
1

ソース コードTermInfoDriver.csを読むと、 Mono が最初に terminfo データベースで $TERM を見つけようとし、失敗すると "xterm" または "linux" を受け入れるようにハードコードされていることがわかります。$TERM が terminfo データベースで見つからない場合、または Mono が terminfo データベースを見つけるように正しく構成されていない場合、エラーが発生します。前者を確認するには、「infocmp」を使用して端末エントリを表示します。

「標準の Linux 端末」は Linux コンソールであり、それは「xterm」または「vt220」(異なる) のいずれとも一致しないため、使用できません。ここでも infocmp を使用して、たとえばinfocmp linux xterminfocmp linux vt220

元の質問に戻ります: 出力された奇妙なテキストは terminfo データベースから出てきました。データベースを使用するように作成されたアプリケーションは、通常、terminfo 関数を使用してデータを解釈し、端末への出力の準備をします。Mono には terminfo 文字列用の独自のインタープリターがあり (正しく動作する可能性があります)、独自のターミナル エミュレーター (表示用) もあるというコメントをいくつか思い出しました。これらのプログラムが、エラー メッセージの出力など、処理することを想定していない文字列に対して奇妙なことを行うことは珍しくありません。「実際の」ハードウェア端末は、通常、予期しない入力を単純に無視します。

于 2015-02-04T21:53:25.777 に答える