web-dev-qa-db-ja.com

gnome-terminalは太字に明るい色を使用します

gnome-terminalは、同じ色で太字属性を持たない文字よりも明るい色で色および太字属性をもつ文字を表示するために使用され、合計16色が可能です。 [基本設定]ページにはまだ選択できる16色がありますが、文字が太字であっても常に一番上の行を使用するようです。使用されている色の一番下の行が表示されないようです。

(これはNethackをプレイする際の問題です。なぜなら、私はモンスターやオブジェクトを16の異なる色で見ることに慣れているからです。)

16色すべてを元の状態に戻すという方法はありますか?

3
aschepler

短いバージョン:TERM=xterm nethackを試してください。ほとんどの場合、トリックを行います。

ロングバージョン:

端末に256色のテストパターンを印刷する の回答からスクリプトの出力を試してみてください。

あなたが話している属性(\e[1m)は、太字、明るい、またはその両方を意味するかどうかにかかわらず、従来の混乱を持っています。ほとんどすべてのターミナルエミュレーターに拡張256色パレットが表示され、一部の(gnome-terminalを含む)にトゥルーカラーサポートが表示されるため、傾向はこの属性に向かって変化し、太字を意味します。明らかに、直接のRGBカラーを改ざんすることを意図したものではなく、256色パレットにも問題があります(これらのインデックス間にマッピングがあるのでしょうか、それともパレット外の色になりますか?)。

パレットの最初の16エントリにアクセスするには、複数の方法があります。番号30〜37(前景)および40〜47(背景)のレガシーエスケープシーケンスは、最初の8を表します。前景のシーケンスは、1(太字/明るい)モードと組み合わせると、従来の互換性のために明るい対応を有効にします理由(例:nethackが以前と同じように見えるため...ため息)。

コード90〜97(fg)と100〜107(bg)は、いずれにしても明るいものである次の8つのパレットエントリを表しています。

新しい256色のパレットエスケープシーケンス(fgの場合は38; 5; 0 – 38; 5; 255、bgの場合は48; 5; 0 – 48; 5; 255)の動作は異なります(xtermの動作に従う):ここで1 (bold/bright)属性は太字のみを有効にし、色を変更しません。

したがって、あなたの場合、違いはおそらくあなたのアプリが昔ながらのエスケープシーケンスを出力することでしたが、今ではまったく同じパレットの色を参照する新しい(256色パレット)を出力することです、唯一の違いはモード1の動作は異なります。太字で明るいというよりは、ここでのみ太字を意味します。

これは、順番に(推論チェーンを逆方向にたどっていきます)、おそらく以前のようにxtermではなく、xterm-256colorにデフォルト設定されているTERM環境変数が原因です。この変数を元に戻して、それがアプリに与える影響を確認してください。

調査せずに私が理解できないもの(および時間と関心の欠如のために調査しません):nethackはncursesを使用しているようです。 ncursesは、使用するエスケープシーケンスの種類をアプリが決定することを許可せず、256色へのアクセスのみを提供し、最初の16に使用するエスケープシーケンスをncursesのプライベートビジネスに提供します。実際、tput setafおよびtput setab、いくつかの奇妙な構文では、0〜7、8〜15、および16〜255の間隔でif-elseブランチをエンコードします。つまり、私が知る限り、最初の16色のレガシーエスケープシーケンス。これは、TERM = xterm-256colorであっても、TERM = xtermと比較して動作が変わらないことを意味します。これまでに受け取った入力を考慮して、ここからさらに調査させていただきます。 scriptを使用してnethackの出力を記録し、テキストビューアーで調べて、どの種類のエスケープシーケンスが出力されるかを確認します。

6
egmont