ほとんどの端末では、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 値を示しています。
上記を使用すると、緑の背景に赤いテキストを作成できます (しかし、なぜでしょうか?)。
\033[31;42m
11色(幕間)
ブレント・ベルリンとポール・ケイは、著書『基本的な色彩用語:その普遍性と進化』の中で、さまざまな言語族の 20 の異なる言語から収集したデータを使用して、白、黒、赤、緑、黄、青、茶、紫、ピンク、オレンジ、灰色の 11 の基本色カテゴリを特定しました。
ベルリンとケイは、最大 11 色カテゴリ未満の言語では、色が特定の進化パターンに従うことを発見しました。このパターンは次のとおりです。
- すべての言語には、黒(寒色)と白(明るい色)を表す用語が含まれています。
- 言語に 3 つの用語が含まれている場合、そこには「赤」を表す用語が含まれています。
- 言語に 4 つの用語が含まれている場合、緑または黄色のいずれか (両方ではない) を表す用語が含まれます。
- 言語に 5 つの用語が含まれている場合、緑と黄色の両方の用語が含まれます。
- 言語に 6 つの用語が含まれている場合、そこには青を表す用語が含まれています。
- 言語に 7 つの用語が含まれている場合、その中には茶色を表す用語も含まれています。
- 言語に 8 個以上の用語が含まれている場合、紫、ピンク、オレンジ、または灰色を表す用語が含まれます。
これが、物語『ベオウルフ』に黒、白、赤の色しか登場しない理由かもしれません。また、聖書に青が出てこない理由もこれかもしれません。ホメロスの『オデュッセイア』には、黒が約 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 | 標準色(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")
これは印刷されます