端末はどのように正確な色を生成しますか?

端末はどのように正確な色を生成しますか?

背景

さまざまな設定で端末を使用してください。プログラムのカラー出力が画面に正しくレンダリングされないことがよくあります。

インターネットには特定の設定の色を変更する方法がたくさんあります。しかし、これらの修正の概念の理解が不足しています。

質問

端末の色がオフになっている理由を理解するには、どの概念を知る必要がありますか?

さまざまなカラープロファイルを使用してvimポケットベルを実行しています。batすべて同じ端末セッション内にあります。

私はWayland(sway)、ssh、tmuxfootと一緒にターミナルエミュレータを使用しています。alacritty

色精度テスト

色の精度をテストするためにポケットベルを使用してくださいbat

bat --list-themes

さまざまなテーマの20以上のカラフルなサンプルコードを端末に出力します。次に、他のマシンと設定の出力を比較します。

PS:端末を作成するときは、端末または端末エミュレータを参照してください。

答え1

ターミナルは2つの主な方法、つまり古いインデックスパレットと新しいトゥルーカラーターミナルモードで色を提供できます。前者には、最後の定義を除くほぼすべての端末定義で使用されるすべての8、16、および256色モードが含まれています-direct。 (一度も人気がなく、実際には使用されなくなった88色モードもあります。)

ただし、8色と16色の順序の標準定義はなく、256色のパレットには一般的な値がありますが、一部の端末エミュレータは動作が異なります。したがって、1が赤を表すと仮定する以外に、特定の色が端末に表示されると仮定することはできません。実際、人々はさまざまな理由で正確な色をカスタマイズして選択できます。たとえば、半透明の端末(灰色に似て表示)を使用する場合、暗い赤は読みにくいので、明るいテーマを使用することを好みます。

ANSIカラーを扱うウィキペディア記事ターミナルエミュレータ間で使用できるさまざまな色合いを示す各ターミナルエミュレータの違いを示し、すべて正しい動作と見なされます。通常、メインパレットの色を選択するのは端末エミュレータ自体であり(私の場合はAlacritty)、その端末エミュレータで実行されている他のすべてのプログラム(SSHを介して実行されるプログラムを含む)は同じ値を使用する必要があります。インデックスパレット。

これで、ターミナルの24ビットトゥルーカラーモードを使用すると、同じ色が得られます。多くのプログラムがこのモードをサポートしていますが、トゥルーカラーを実行する端末の種類を表すでTERM終わる定義は通常設定されていないため、有効にすることは困難です。-direct例えば、多くの端末エミュレータは、xterm-256color実際に真の色をサポートしていても、基本的に真の色を使用します。その理由は、トゥルーカラーxterm-directがはるかに最新であり、システム間の互換性がはるかに低いためです(たとえば、SSH経由でログインするときなど)。TERMターミナルエミュレータとオペレーティングシステムがそれをサポートしていることがわかっている場合は、ターミナルエミュレータの設定またはシェルの起動コードで直接設定する必要があります。

termguicolors最新バージョンのVimはTrue Colorモードをサポートしており、有効になっている場合は端末でGUIの色を使用できます(t_8f端末定義に示すようにモードを設定します)。t_8bGitを含む他の多くのプログラムも設定可能な色をサポートしています。これは良い機能であるだけでなく、アクセシビリティにも重要です(たとえば、特定の種類の色盲を持つ人が適切な色を選択できるようにします)。

また、tmuxには、放出できるよりも多くの色を許可する機能があります。たとえば、tmuxセッション内でtmux-directTrue Color出力を発行するプログラムを使用しましたが、後でLinuxコンソール(16色のみ)に再接続すると、tmuxはサポートされている最も近い色にマッピングを試みます。すべてがうまくいきますが(良いことです)、醜い結果が発生します(悪いことです)。この場合、失敗するしかありません。

関連情報