ANSIカラーエスケープシーケンスのリスト 質問する

ANSIカラーエスケープシーケンスのリスト 質問する

ほとんどの端末では、ANSI エスケープ シーケンスを使用して出力を色付けすることができます\033

サポートされているすべての色とオプション (明るい色や点滅など) のリストを探しています。

おそらくサポートしている端末間で違いがあるため、私は主に xterm 互換端末でサポートされるシーケンスに興味があります。

ベストアンサー1

あなたが探している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)。

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

フォント効果

コード 効果 注記
0 リセット / 通常 すべての属性がオフ
1 大胆または強度の増加
2 かすかな(強度の低下) 広くサポートされていません。
3 イタリック 広くサポートされていません。逆として扱われることもあります。
4 下線
5 ゆっくり瞬き 1分あたり150未満
6 急速な瞬き MS-DOS ANSI.SYS; 1 分あたり 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 表意文字の強勢標示 ほとんどサポートされていない
65 表意文字属性オフ 60-64のすべての効果をリセットします
90~97年 明るい前景色を設定する aixterm (標準ではない)
100~107 明るい背景色を設定する aixterm (標準ではない)

2ビットカラー

もう手に入れましたよ!

4ビットカラー

端末の色を実装する標準は、限られた (4 ビット) オプションから始まりました。次の表は、さまざまな端末エミュレータで使用される背景色と前景色の RGB 値を示しています。

さまざまな端末エミュレータで実装されている ANSI カラーの表

上記を使用すると、緑の背景に赤いテキストを作成できます (しかし、なぜでしょうか?)。

\033[31;42m

11色(幕間)

ブレント・ベルリンとポール・ケイは、著書『基本的な色彩用語:その普遍性と進化』の中で、さまざまな言語族の 20 の異なる言語から収集したデータを使用して、白、黒、赤、緑、黄、青、茶、紫、ピンク、オレンジ、灰色の 11 の基本色カテゴリを特定しました。

ベルリンとケイは、最大 11 色カテゴリ未満の言語では、色が特定の進化パターンに従うことを発見しました。このパターンは次のとおりです。

  1. すべての言語には、黒(寒色)と白(明るい色)を表す用語が含まれています。
  2. 言語に 3 つの用語が含まれている場合、そこには「赤」を表す用語が含まれています。
  3. 言語に 4 つの用語が含まれている場合、緑または黄色のいずれか (両方ではない) を表す用語が含まれます。
  4. 言語に 5 つの用語が含まれている場合、緑と黄色の両方の用語が含まれます。
  5. 言語に 6 つの用語が含まれている場合、そこには青を表す用語が含まれています。
  6. 言語に 7 つの用語が含まれている場合、その中には茶色を表す用語も含まれています。
  7. 言語に 8 個以上の用語が含まれている場合、紫、ピンク、オレンジ、または灰色を表す用語が含まれます。

これが、物語『ベオウルフ』に黒、白、赤の色しか登場しない理由かもしれません。また、聖書に青が出てこない理由もこれかもしれません。ホメロスの『オデュッセイア』には、黒が約 200 回、白が約 100 回登場します。赤は 15 回登場しますが、黄色と緑は 10 回しか登場しません。(詳細はこちら

言語間の違いも興味深いものです。英語と中国語では、色を表す言葉が多用されていることに注目してください。しかし、これらの言語を詳しく調べると、それぞれが異なる方法で色を使用していることがわかります。(詳しくは

中国語と英語の色名。画像は「muyueh.com」より引用

一般的に言って、人間の言語における色の命名、使用、グループ化は興味深いものです。さて、番組に戻りましょう。

8ビット(256)色

技術が進歩し、以下に示すように、事前に選択された 256 色のテーブルが利用可能になりました。

ANSIエスケープシーケンスの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 標準色(4ビット色と同じ)
0x08-0x0F 高輝度色
0x10-0xE7 6 × 6 × 6 立方体 (216 色): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
0xE8-0xFF 黒から白まで24段階のグレースケール

すべての色

今、私たちは未来に生きており、完全な 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

「トゥルーカラー」端末のサポートがリストされていますここ

上記の多くはWikipediaのページから引用したものです。ANSIエスケープコード「」。

自分に思い出させる便利なスクリプト

私はよく、どの色が何色なのかを思い出そうとするので、次のような便利なスクリプトがあります~/bin/ansi_colours:

#!/usr/bin/env python3

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 color")
print("\\033[2K                          - Clear Line")
print("\\033[<L>;<C>H or \\033[<L>;<C>f  - Put 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\n")
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\n")
print("\\033[4m                          - Underline on")
print("\\033[24m                         - Underline off\n")
print("\\033[1m                          - Bold on")
print("\\033[21m                         - Bold off")

これは印刷されます

シンプルなANSIカラー

おすすめ記事