ターミナルの256色⇒悪夢のレベル



私はstdout出力に長いデバッグ出力を持つバイクを構築していますが、ログの深刻な色について心配していました。 現代のxterm端末は256色が好きですが、このパレットのエスケープシーケンスを考え出した人たちは、後方互換性と暗号経験主義の潜在的な傾向に悩まされており、すべてを理解するのに数時間かかりました。 また、インターネットには、インターネットがどのように配置されているかについての詳細な説明がたくさんありません。
つまり、Xターミナルのテキストをカーリーで表示できるようになりました。 エスケープシーケンスを生成するvisivigなど、サービスの外観をスケッチしました。 選択した色、フォントスタイル-波線のセットを取得します。 内臓に興味がある人-猫をお願いします。

xtermの色


端末が256色を表示できることを理解するには、次のことを言う必要があります。
  case "$TERM" in 'xterm') TERM=xterm-256color;; 'screen') TERM=screen-256color;; 'Eterm') TERM=Eterm-256color;; esac 

色自体は絶対に息をのむような方法でエンコードされます。 伝統的に " \e[ "で始まり " m "で終わるエスケープシーケンスは、フラグ、背景色、およびテキスト色で構成されます。 太字斜線下線付き 、および逆( fg⇐⇒bg )のフラグ:それぞれ、 fg⇐⇒bg (まだ点滅するフラグがありますが、子供は突然私を読みますか?) これらのスタイルのキャンセルのフラグ:22、23、24、27。フラグはセミコロンを介して次々と書き込むことができます。最後の「m」の前にセミコロンは入れません。
テキストの色には署名があります(申し訳ありません) 38; 05; 色; 。 背景色-48; 05; 色; 。 ここでのCOLORは∀整数∈[1、255]です。 最初の16個は古い端末の色に馴染みがあり、最後の24個は灰色の色合いで、残りは残りです。
次のようなものです(写真についてはFedorに感謝します):


シーケンス「 \e[01;04;38;05;196;48;05;232m 」が黒の背景に太字の下線付き赤のモードをオンにすることは簡単にわかります。

色を取得する方法は?


色は、簡単で明確なアルゴリズムによって残りの256 - 16 - 24 = 216バリアントにエンコードされます。rgb階調は6に調整され、数字は16進数システムでRGBとして取得されます。 16 + 5 * 6² + 3 * 6 + 0 = 214 )。 それらがない場合と同様に、例外があります。 同じ「標準」16色とグレーのグラデーション。 うん。

なぜこれだけなのですか?


まあ、最初に、私は興味がありました。 第二に、3時間はお金ではありません。 第三に、今では私のログファイルが非常にきらめき、一目で何かを取り出すのがさらに難しくなりました。 もちろん、 PS1はもちろんゼロから書き直されました。

一般に、特定の色のエスケープシーケンスが必要な場合-WYSIWYGです。 何らかの理由でオフラインが必要な場合- @github

ご清聴ありがとうございました。

UPD: frexx.de/xterm-256-notes-トピックに関する良いリンク。 ありがとう、 yermulnik

Source: https://habr.com/ru/post/J161999/


All Articles