\033
ほとんどの端末では、 ANSI エスケープ シーケンスを使用して出力を色付けすることができます。
サポートされているすべての色とオプション (明るい色や点滅など) のリストを探しています。
対応している端末によって違いがあるのかもしれないので、主にxterm対応端末で対応しているシーケンスに興味があります。
\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 | ゆっくり点滅 | 毎分150未満 |
6 | 急速点滅 | MS-DOS ANSI.SYS; 毎分 150 回以上。広くサポートされていない |
7 | 【【逆動画】】 | 前景色と背景色を入れ替える |
8 | 隠す | 広くサポートされていません。 |
9 | 取り消し線 | 文字は判読可能ですが、削除対象としてマークされています。広くサポートされていません。 |
10 | プライマリ (デフォルト) フォント | |
11–19 | 代替フォント | 代替フォントを選択n-10 |
20 | フラクトゥール | ほとんどサポートされていません |
21 | 太字または二重下線 | 太字は広くサポートされていません。二重下線はほとんどサポートされていません。 |
22 | 通常の色または強度 | 大胆でも淡白でもない |
23 | 斜体ではなく Fraktur でもない | |
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 (標準ではありません) |
あなたはすでにこれを持っています!
端末の色を実装する標準は、限られた (4 ビット) オプションから始まりました。以下の表は、さまざまな端末エミュレーターでこれらに使用される背景色と前景色の RGB 値を示しています。
上記を使用すると、緑の背景に赤いテキストを作成できます (しかし、なぜでしょうか?)。
\033[31;42m
Brent Berlin と Paul Kay は、著書「Basic Color Terms: Their Universality and Evolution」で、さまざまな言語ファミリーの 20 の異なる言語から収集したデータを使用して、白、黒、赤、緑、黄などの 11 の可能な基本的な色のカテゴリを特定しました。ブルー、ブラウン、パープル、ピンク、オレンジ、グレー。
Berlin と Kay は、最大 11 の色カテゴリに満たない言語では、色が特定の進化パターンに従うことを発見しました。このパターンは次のとおりです。
これが、ベオウルフの物語に黒、白、赤しか含まれていない理由かもしれません。聖書に青色が含まれていないのもそのためかもしれません。ホーマーズオデッセイには、黒が約 200 回、白が約 100 回含まれています。赤は 15 回出現するのに対し、黄と緑は 10 回しか出現しません。(詳細はこちら)
言語間の違いも興味深いです。英語と中国語で使用される異なる色の単語が豊富にあることに注意してください。しかし、これらの言語を深く掘り下げると、それぞれが異なる方法で色を使用していることがわかります。(詳細情報)
一般的に言えば、人間の言語における色の命名、使用、およびグループ化は興味深いものです。さて、番組に戻ります。
技術が進歩し、以下に示すように、事前に選択された 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"
これは印刷します
どうですか:
ECMA-48-コード化された文字セットの制御機能、第5版(1991年6月) -色制御コードを定義する標準であり、xtermでもサポートされているようです。
SGR 38および48は、もともとECMA-48によって予約されていましたが、数年後にITU、IEC、およびISOの合同規格で具体化されました。この規格は、いくつかの部分に分かれており、(他の多くのものの中でも)SGRを文書化しています。ダイレクトカラーとインデックスカラーの38/48制御シーケンス:
Wikipediaページのこの表にANSIエスケープコードのxtermの列があります
関連情報とともに、さらに興味深いものがあります。
それはあなたの端末に絶対に関連しています。VTE はまばたきをサポートしていません。VTEに従って 、 、 、 などを使用すると、まばたきができgnome-terminal
なくtilda
なりguake
ますterminator
。
VTE でブリンクを使用している、または使用したい場合は、 を使用する必要があります。
端末名で infocmp コマンドを使用できます。xfce4-terminal
xterm
#infocmp vt100
#infocmp xterm
#infocmp vte
例えば :
# infocmp vte
# Reconstructed via infocmp from file: /usr/share/terminfo/v/vte
vte|VTE aka GNOME Terminal,
am, bce, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#24, ncv#16, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[2J,
cnorm=\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
el=\E[K, enacs=\E)0, home=\E[H, hpa=\E[%i%p1%dG, ht=^I,
hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m,
is2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8,
kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~,
kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C,
kb2=\E[E, kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kend=\EOF, kf1=\EOP,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P,
kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R,
kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~,
kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~,
kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS,
kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khome=\EOH,
kich1=\E[2~, kind=\E[1;2B, kmous=\E[M, knp=\E[6~,
kpp=\E[5~, kri=\E[1;2A, kslt=\E[4~, meml=\El, memu=\Em,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, ritm=\E[23m,
rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E[?47l\E8, rmir=\E[4l,
rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m, rs1=\Ec,
rs2=\E7\E[r\E8\E[m\E[?7h\E[!p\E[?1;3;4;6l\E[4l\E>\E[?1000l\E[?25h,
sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p5%t;2%;%?%p7%t;8%;%?%p1%p3%|%t;7%;m%?%p9%t\016%e\017%;,
sgr0=\E[0m\017, sitm=\E[3m, smacs=^N, smam=\E[?7h,
smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,