ターミナルで RGB カラー出力を有効にするにはどうすればいいですか?

ターミナルで RGB カラー出力を有効にするにはどうすればいいですか?

ANSI エスケープ コードを使用して、色付きの文字列を gnome ターミナルに印刷しようとしていますが、カスタム カラーや 256 色の追加カラーでは機能しますが、RGB コードでは機能しません。

つまり、簡単に言うと、

cout << "\033[33m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;5;135m" << '.' << "\033[0m"; # prints with color
cout << "\033[38;2;0;135;0m" << '.' << "\033[0m"; # doesn't work, prints with default color

gnome-terminal で RGB カラーコードを使用して何かを出力するにはどうすればよいですか?

出力についてはこのリンクに従っています:Wikipedia ANSI エスケープ コード

追加した:

$ export TERM=xterm-256color

.bashrc ファイルに 256 色をサポートするように追加します。

$ tput colors

重要な場合は、256 を出力します。

答え1

次の理由により、RGB カラーはターミナルでは使用できません。

  • Bash はコマンドラインの色を選択しません。
  • Bash では ANSI カラーのみを指定できます。

上記の 2 つの理由は非常に密接に関連しています。これらのほとんどは、画面と ANSI カラー仕様に依存します。優れたターミナル エミュレーターを使用すると、特定の ANSI カラー コードに対してカスタム RGB カラーを設定できる場合があります。

シェルとしての Bash は、画面がディスプレイに対して何をできるかに関して無力です。端末上の単語を画面に渡すだけです。画面はそれをどうするかを決定します。画面は、ANSI エスケープ コードが表す色を決定できます (端末が色を許可している場合)。

回避策としては、ターミナルのカラー仕様を変更することです。ただし、色を変更できるターミナルはほとんどありません (私は知りません)。

答え2

gnome-terminal で True Colors が動作するには、vte >= 0.36 が必要です。vte が十分に新しいものであることを確認してください。その場合、コードは動作するはずです。

(注: サンプル アプリケーションのようにハードコードされた文字列を出力する場合、$TERM の値は必ずしもまったく無関係です。ncurses など、動作がこれに依存するライブラリを使用している場合にのみ重要です。)

関連情報