1. ホーム
  2. colors

[解決済み】ANSIカラーエスケープシーケンス一覧

2022-04-17 15:47:26

質問

ほとんどの端末では、出力に色をつけるには \033 ANSIエスケープシーケンス

サポートされているすべての色とオプション(明るい、点滅など)のリストが欲しいのですが。

対応端末の違いもあると思うので、主にxterm対応端末でサポートされているシーケンスに興味があります。

どのように解決するのですか?

お探しのANSIエスケープシーケンスは、Select Graphic Renditionのサブセットです。これらはすべて次のような形式です。

\033[XXXm

ここで XXX はセミコロンで区切られた一連のパラメータです。

C言語で、テキストを赤、太字、下線にする(以下、他の多くのオプションについて説明します)と言う場合、次のように書きます。

printf("\033[31;1;4mHello\033[0m");

C++では、以下のようになります。

std::cout<<"\033[31;1;4mHello\033[0m";

Python3では、以下のようになります。

print("\033[31;1;4mHello\033[0m")

で、Bashでは

echo -e "\033[31;1;4mHello\033[0m"

ここで、最初の部分はテキストを赤にし ( 31 )、太字( 1 )、下線( 4 )、そして最後の部分はこれらをすべてクリアする( 0 ).

下の表にあるように、太字、フォント、下線、&cなど、設定できるテキストプロパティは非常に多くあります。

フォント効果

<テーブル コード 効果 備考 0 リセット/通常 全アトリビュートオフ 1 太字または強度の増加 2 微弱(強度低下) 広く支持されていない。 3 イタリック あまりサポートされていない。逆方向として扱われることもある。 4 アンダーライン 5 スローブリンク 1分間に150個以下 6 ラピッドブリンク MS-DOS ANSI.SYS; 毎分150回以上; 広くサポートされていません。 7 [リバースビデオ]]。 前景色と背景色の入れ替え 8 隠す あまりサポートされていない。 9 クロスオーバー 文字は読めるが、削除のマークがついている。 あまりサポートされていない。 10 プライマリ(デフォルト)フォント 11-19 代替フォント 代替フォントを選択する n-10 20 フラクトゥール ほとんどサポートされていない 21 太字オフまたはダブルアンダーライン ボールドオフはあまりサポートされておらず、ダブルアンダーラインはほとんどサポートされていない。 22 通常の色または強度 太くもなく細くもない 23 イタリック体でない、フラクトゥールでない 24 アンダーラインオフ 単一または二重の下線でない 25 ブリンクオフ 27 逆オフ 28 暴露 隠す 29 クロスしていない 30-37 前景色を設定する 以下のカラーテーブルを参照してください。 38 前景色を設定する 次の引数は 5;<n> または 2;<r>;<g>;<b> は、以下を参照してください。 39 デフォルトの前景色 実装定義(規格による) 40-47 背景色の設定 以下のカラーテーブルを参照してください。 48 背景色の設定 次の引数は 5;<n> または 2;<r>;<g>;<b> は、以下を参照してください。 49 デフォルトの背景色 実装定義(規格による) 51 枠付き 52 囲み 53 上線 54 枠がない、または囲まれていない 55 オーバーラインなし 60 表意文字下線 ほとんどサポートされていない 61 表意文字二重下線 ほとんどサポートされていない 62 表意文字オーバーライン ほとんどサポートされていない 63 表意文字ダブルオーバーライン ほとんどサポートされていない 64 ideogram ストレスマーキング ほとんどサポートされていない 65 表意文字属性オフ 60-64の全ての効果をリセットする 90-97 明るい前景色を設定する aixterm (標準ではありません) 100-107 明るい背景色を設定する aixterm (標準ではありません)

2ビットカラー

もう、これでいいの!

4ビットカラー

端末の色を実装する規格は、限られた(4ビットの)オプションから始まりました。以下の表は、さまざまな端末エミュレータでこれらに使用される背景色と前景色の RGB 値の一覧です。

上記を利用すると、緑色の背景に赤色の文字を作ることができます(でも、なぜ?

\033[31;42m

11色(間奏曲)

その著書「Basic Color Terms: Brent BerlinとPaul Kayは、様々な語族の20の言語から収集したデータを用いて、白、黒、赤、緑、黄、青、茶、紫、ピンク、オレンジ、灰色の11の基本色カテゴリーを特定しました。

バーリンとケイは、色の分類が最大11種類より少ない言語では、色が特定の進化パターンに従っていることを発見した。そのパターンとは次のようなものである。

  1. すべての言語には、黒(寒色)と白(明色)の用語が含まれている。
  2. ある言語に3つの用語が含まれている場合、その言語には赤を表す用語が含まれています。
  3. 4つの用語が含まれる場合、緑か黄色のどちらかの用語が含まれます(両方は含まれません)。
  4. 5つの用語が含まれる場合、緑と黄色の両方の用語が含まれます。
  5. 6つの用語を含む言語では、青を表す用語が含まれています。
  6. ある言語に7つの用語が含まれている場合、その言語には茶色を表す用語が含まれています。
  7. 8つ以上の用語が含まれている場合、紫、ピンク、オレンジ、グレーを表す用語が含まれています。

このためか、ストーリー ベオウルフ は、黒、白、赤の3色しか含まれていません。また、なぜ 聖書 は青色を含んでいない。ホメロスの オデッセイ 黒は約200回、白は約100回含まれています。赤は15回、黄と緑は10回しか出てきません。( その他の情報はこちら )

また、言語間の違いも興味深い。英語と中国語では、異なる色の単語がたくさん使われていることに注目しよう。しかし、これらの言語をより深く掘り下げてみると、それぞれが異なる方法で色を使用していることがわかります。( その他の情報 )

一般的に言って、人間の言語における色の命名、使用、グループ分けは魅力的です。さて、本番に戻りましょう。

8ビット(256)色

技術の進歩により、下図のように256色をあらかじめ選択した表ができるようになった。

これを使うと、こんな風にピンクの文字が作れます。

\033[38;5;206m     #That is, \033[38;5;<FG COLOR>m

で早朝の青背景を作る。

\033[48;5;57m      #That is, \033[48;5;<BG COLOR>m

もちろん、これらを組み合わせることも可能です。

\033[38;5;206;48;5;57m

8ビットカラーはこのように配置されています。

0x00-0x07:  standard colors (same as the 4-bit colours)
0x08-0x0F:  high intensity colors
0x10-0xE7:  6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
0xE8-0xFF:  grayscale from black to white in 24 steps

全色

現在、私たちは未来に生きており、RGBの全領域を使用することができます。

\033[38;2;<r>;<g>;<b>m     #Select RGB foreground color
\033[48;2;<r>;<g>;<b>m     #Select RGB background color

で、茶色っぽい背景にピンクっぽい文字を入れることができます。

\033[38;2;255;82;197;48;2;155;106;0mHello

トゥルーカラー端末のサポートについて掲載しています。 これ .

上記の多くは、ウィキペディアのページ「"」から引用しています。 ANSIエスケープコード "です。

自分に言い聞かせるための便利なスクリプト

私はよく、どの色が何色なのか覚えようとする立場にあるので、便利なスクリプトを用意しています。 ~/bin/ansi_colours :

#!/usr/bin/python

print "\\033[XXm"

for i in range(30,37+1):
    print "\033[%dm%d\t\t\033[%dm%d" % (i,i,i+60,i+60);

print "\033[39m\\033[49m - Reset colour"
print "\\033[2K - Clear Line"
print "\\033[<L>;<C>H OR \\033[<L>;<C>f puts the cursor at line L and column C."
print "\\033[<N>A Move the cursor up N lines"
print "\\033[<N>B Move the cursor down N lines"
print "\\033[<N>C Move the cursor forward N columns"
print "\\033[<N>D Move the cursor backward N columns"
print "\\033[2J Clear the screen, move to (0,0)"
print "\\033[K Erase to end of line"
print "\\033[s Save cursor position"
print "\\033[u Restore cursor position"
print " "
print "\\033[4m  Underline on"
print "\\033[24m Underline off"
print "\\033[1m  Bold on"
print "\\033[21m Bold off"

このプリントは

<イグ