349

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

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

対応している端末によって違いがあるのか​​もしれないので、主にxterm対応端末で対応しているシーケンスに興味があります。

4

5 に答える 5

864

探している 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 (標準ではありません)

2 ビットカラー

あなたはすでにこれを持っています!

4 ビットカラー

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

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

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

\033[31;42m

11色 (間奏曲)

Brent Berlin と Paul Kay は、著書「Basic Color Terms: Their Universality and Evolution」で、さまざまな言語ファミリーの 20 の異なる言語から収集したデータを使用して、白、黒、赤、緑、黄などの 11 の可能な基本的な色のカテゴリを特定しました。ブルー、ブラウン、パープル、ピンク、オレンジ、グレー。

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

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

これが、ベオウルフの物語に黒、白、赤しか含まれていない理由かもしれません。聖書に青色が含まれていないのもそのためかもしれません。ホーマーズオデッセイには、黒が約 200 回、白が約 100 回含まれています。赤は 15 回出現するのに対し、黄と緑は 10 回しか出現しません。(詳細はこちら)

言語間の違いも興味深いです。英語と中国語で使用される異なる色の単語が豊富にあることに注意してください。しかし、これらの言語を深く掘り下げると、それぞれが異なる方法で色を使用していることがわかります。(詳細情報)

中国語と英語の色の名前.  から適応した画像

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

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:  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"

これは印刷します

シンプルな ANSI カラー

于 2015-10-19T04:49:11.423 に答える
19

どうですか:

ECMA-48-コード化された文字セットの制御機能、第5版(1991年6月) -色制御コードを定義する標準であり、xtermでもサポートされているようです。

SGR 38および48は、もともとECMA-48によって予約されていましたが、数年後にITU、IEC、およびISOの合同規格で具体化されました。この規格は、いくつかの部分に分かれており、(他の多くのものの中でも)SGRを文書化しています。ダイレクトカラーインデックスカラーの38/48制御シーケンス:

Wikipediaページのこの表にANSIエスケープコードのxtermの列があります

于 2011-01-30T10:43:59.457 に答える
11

関連情報とともに、さらに興味深いものがあります。

于 2013-12-11T10:39:46.087 に答える
5

それはあなたの端末に絶対に関連しています。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,
于 2016-03-16T20:03:12.110 に答える