Daftar urutan pelarian warna ANSI

225

Pada sebagian besar terminal dimungkinkan untuk mewarnai keluaran menggunakan \033urutan pelarian ANSI.

Saya mencari daftar semua warna dan opsi yang didukung (seperti cerah dan berkedip).

Karena mungkin ada perbedaan antara terminal yang mendukungnya, saya terutama tertarik pada urutan yang didukung oleh terminal yang kompatibel dengan xterm.

Pencuri
sumber
Sebenarnya, Anda bisa menggunakan warna di windows cmd. stackoverflow.com/questions/41207496/…
Joel
Dan dari MSDN
Joel

Jawaban:

510

Urutan escape ANSI yang Anda cari adalah subset Select Graphic Rendition. Semua ini memiliki formulir

\033[XXXm

di mana XXXserangkaian parameter yang dipisahkan titik koma.

Untuk mengatakan, buat teks merah, tebal, dan bergaris bawah (kami akan membahas banyak opsi lain di bawah) di C yang dapat Anda tulis:

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

Di C ++ Anda akan menggunakan

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

Di Python3 Anda akan menggunakan

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

dan di Bash Anda akan menggunakan

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

di mana bagian pertama membuat teks merah ( 31), tebal ( 1), bergaris bawah ( 4) dan bagian terakhir menghapus semua ini ( 0).

Seperti dijelaskan dalam tabel di bawah, ada sejumlah besar properti teks yang dapat Anda atur, seperti huruf tebal, huruf, garis bawah, & c. (Bukankah konyol bahwa StackOverflow tidak memungkinkan Anda untuk menempatkan tabel yang tepat sebagai jawaban?)

Efek Huruf

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  Code    ║             Effect             ║                                   Note                                  ║
╠══════════╬════════════════════════════════╬═════════════════════════════════════════════════════════════════════════╣
║ 0        ║  Reset / Normal                ║  all attributes off                                                     ║
║ 1        ║  Bold or increased intensity   ║                                                                         ║
║ 2        ║  Faint (decreased intensity)   ║  Not widely supported.                                                  ║
║ 3        ║  Italic                        ║  Not widely supported. Sometimes treated as inverse.                    ║
║ 4        ║  Underline                     ║                                                                         ║
║ 5        ║  Slow Blink                    ║  less than 150 per minute                                               ║
║ 6        ║  Rapid Blink                   ║  MS-DOS ANSI.SYS; 150+ per minute; not widely supported                 ║
║ 7        ║  [[reverse video]]             ║  swap foreground and background colors                                  ║
║ 8        ║  Conceal                       ║  Not widely supported.                                                  ║
║ 9        ║  Crossed-out                   ║  Characters legible, but marked for deletion.  Not widely supported.    ║
║ 10       ║  Primary(default) font         ║                                                                         ║
║ 11–19    ║  Alternate font                ║  Select alternate font `n-10`                                           ║
║ 20       ║  Fraktur                       ║  hardly ever supported                                                  ║
║ 21       ║  Bold off or Double Underline  ║  Bold off not widely supported; double underline hardly ever supported. ║
║ 22       ║  Normal color or intensity     ║  Neither bold nor faint                                                 ║
║ 23       ║  Not italic, not Fraktur       ║                                                                         ║
║ 24       ║  Underline off                 ║  Not singly or doubly underlined                                        ║
║ 25       ║  Blink off                     ║                                                                         ║
║ 27       ║  Inverse off                   ║                                                                         ║
║ 28       ║  Reveal                        ║  conceal off                                                            ║
║ 29       ║  Not crossed out               ║                                                                         ║
║ 30–37    ║  Set foreground color          ║  See color table below                                                  ║
║ 38       ║  Set foreground color          ║  Next arguments are `5;<n>` or `2;<r>;<g>;<b>`, see below                       ║
║ 39       ║  Default foreground color      ║  implementation defined (according to standard)                         ║
║ 40–47    ║  Set background color          ║  See color table below                                                  ║
║ 48       ║  Set background color          ║  Next arguments are `5;<n>` or `2;<r>;<g>;<b>`, see below                       ║
║ 49       ║  Default background color      ║  implementation defined (according to standard)                         ║
║ 51       ║  Framed                        ║                                                                         ║
║ 52       ║  Encircled                     ║                                                                         ║
║ 53       ║  Overlined                     ║                                                                         ║
║ 54       ║  Not framed or encircled       ║                                                                         ║
║ 55       ║  Not overlined                 ║                                                                         ║
║ 60       ║  ideogram underline            ║  hardly ever supported                                                  ║
║ 61       ║  ideogram double underline     ║  hardly ever supported                                                  ║
║ 62       ║  ideogram overline             ║  hardly ever supported                                                  ║
║ 63       ║  ideogram double overline      ║  hardly ever supported                                                  ║
║ 64       ║  ideogram stress marking       ║  hardly ever supported                                                  ║
║ 65       ║  ideogram attributes off       ║  reset the effects of all of 60-64                                      ║
║ 90–97    ║  Set bright foreground color   ║  aixterm (not in standard)                                              ║
║ 100–107  ║  Set bright background color   ║  aixterm (not in standard)                                              ║
╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝

Warna 2-bit

Anda sudah mendapatkan ini!

Warna 4-bit

Standar yang menerapkan warna terminal dimulai dengan opsi terbatas (4-bit). Tabel di bawah ini mencantumkan nilai RGB warna latar belakang dan latar depan yang digunakan untuk ini oleh berbagai emulator terminal:

Tabel warna ANSI diimplementasikan oleh berbagai emulator terminal

Dengan menggunakan di atas, Anda dapat membuat teks merah pada latar belakang hijau (tapi mengapa?) Menggunakan:

\033[31;42m

11 Warna (Selingan)

Dalam buku mereka "Istilah Warna Dasar: Universalitas dan Evolusi mereka", Brent Berlin dan Paul Kay menggunakan data yang dikumpulkan dari dua puluh bahasa yang berbeda dari berbagai keluarga bahasa untuk mengidentifikasi sebelas kategori warna dasar yang mungkin: putih, hitam, merah, hijau, kuning, biru, coklat, ungu, merah muda, oranye, dan abu-abu.

Berlin dan Kay menemukan bahwa, dalam bahasa-bahasa dengan kategori warna kurang dari sebelas maksimum, warna-warna tersebut mengikuti pola evolusi tertentu. Pola ini adalah sebagai berikut:

  1. Semua bahasa berisi istilah untuk hitam (warna dingin) dan putih (warna cerah).
  2. Jika suatu bahasa mengandung tiga istilah, maka itu mengandung istilah untuk merah.
  3. Jika suatu bahasa mengandung empat istilah, maka itu mengandung istilah untuk hijau atau kuning (tetapi tidak keduanya).
  4. Jika suatu bahasa mengandung lima istilah, maka itu mengandung istilah untuk hijau dan kuning.
  5. Jika suatu bahasa mengandung enam istilah, maka itu mengandung istilah untuk biru.
  6. Jika suatu bahasa mengandung tujuh istilah, maka itu mengandung istilah untuk coklat.
  7. Jika suatu bahasa mengandung delapan istilah atau lebih, maka itu mengandung istilah untuk ungu, merah muda, oranye atau abu-abu.

Ini mungkin sebabnya kisah Beowulf hanya berisi warna hitam, putih, dan merah. Mungkin juga mengapa Alkitab tidak mengandung warna biru. Homer's Odyssey mengandung warna hitam hampir 200 kali dan putih sekitar 100 kali. Merah muncul 15 kali, sedangkan kuning dan hijau hanya muncul 10 kali. ( Informasi lebih lanjut di sini )

Perbedaan antar bahasa juga menarik: perhatikan kelimpahan kata-kata warna yang berbeda yang digunakan oleh Inggris vs Cina. Namun, menggali lebih dalam ke bahasa-bahasa ini menunjukkan bahwa masing-masing menggunakan warna dengan cara yang berbeda. ( Informasi lebih lanjut )

Nama warna Cina vs Inggris.  Gambar diadaptasi dari "muyueh.com"

Secara umum, penamaan, penggunaan, dan pengelompokan warna dalam bahasa manusia sangat menarik. Sekarang, kembali ke pertunjukan.

8-bit (256) warna

Teknologi canggih, dan tabel 256 warna yang dipilih sebelumnya tersedia, seperti yang ditunjukkan di bawah ini.

Mode warna 256-bit untuk urutan pelarian ANSI

Dengan menggunakan di atas, Anda dapat membuat teks merah muda seperti:

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

Dan buatlah latar belakang biru pagi menggunakan

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

Dan, tentu saja, Anda dapat menggabungkan ini:

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

Warna 8-bit diatur seperti ini:

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

SEMUA WARNA

Sekarang kita hidup di masa depan, dan spektrum RGB penuh tersedia menggunakan:

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

Jadi, Anda dapat menempatkan teks merah muda di latar belakang kecoklatan menggunakan

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

Dukungan untuk terminal "true color" tercantum di sini .

Banyak hal di atas diambil dari halaman Wikipedia " ANSI escape code ".

Naskah yang Berguna untuk Mengingatkan Diri Sendiri

Karena saya sering mencoba mengingat warna apa itu, saya punya skrip praktis bernama ~/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[39m - 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"

Ini mencetak

Warna ANSI sederhana

Richard
sumber
4
Set lengkap kode pelarian ANSI: ascii-table.com/ansi-escape- berikutnyaences
vt
3
@giusti: Keduanya echo -e "\033[38;05;34;1mHi"dan echo -e "\033[38;05;34m\033[1mHi"bekerja untuk saya, meskipun efek font anti-aliasing memang menyebabkan penampilan warna berubah sedikit di bawah huruf tebal di terminal saya menguji ini.
Richard
4
\033[Kode-kode SGR ( ) yang dimulai dengan 38 dan 48 harus dipisahkan dengan yang dinyatakan lain :sebagai sub-pemisah meskipun ini tidak sepenuhnya jelas dari sumber-sumber utama di: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdf dan itu.int/rec/… . Juga beberapa interpretasi lupa ID spasi warna dalam bentuk 2(16M-warna RGB) / 3(16M-warna CMY) / 4(??? CMYK) bentuk - misalnya seharusnya \033[38:2::255:255:255muntuk latar depan 16M Putih dan tidak \033[38:2:255:255:255m!
SlySven
2
Alasan saya melanjutkan tentang ini adalah bahwa proyek Mudlet I kode untuk harus menangani kedua bentuk dan saya baru-baru ini naik ke siku saya dalam hal ini untuk membuatnya bekerja lebih baik ...
SlySven
4
Saya hanya ingin menemukan daftar warna ANSI dan menghabiskan terlalu banyak waktu dengan membaca artikel tentang "istilah warna dasar". Terima kasih atas gangguan yang luar biasa! :)
mzuther
14

Bagaimana tentang:

ECMA-48 - Fungsi Kontrol untuk Set Karakter Kode, edisi ke-5 (Juni 1991) - Standar yang mendefinisikan kode kontrol warna, yang tampaknya didukung juga oleh xterm.

SGR 38 dan 48 awalnya dicadangkan oleh ECMA-48, tetapi dibuat beberapa tahun kemudian dalam standar ITU, IEC, dan ISO bersama, yang datang dalam beberapa bagian dan yang (di antara banyak hal lainnya) mendokumentasikan SGR 38/48 urutan kontrol untuk warna langsung dan warna yang diindeks :

Ada kolom untuk xterm dalam tabel ini di halaman Wikipedia untuk kode pelarian ANSI

sinelaw
sumber
4

Ini benar-benar terkait dengan terminal Anda. VTE tidak mendukung berkedip, Jika Anda menggunakan gnome-terminal, tilda, guake, terminator, xfce4-terminaldan sebagainya sesuai VTE, Anda akan tidak memiliki berkedip.
Jika Anda menggunakan atau ingin menggunakan kedip pada VTE, Anda harus menggunakannya xterm.
Anda dapat menggunakan perintah infocmp dengan nama terminal:

#infocmp vt100 
#infocmp xterm 
#infocmp vte 

Sebagai contoh :

# 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,
Teluk Persia
sumber
VTE 0.52 / gnome-terminal 3.28 menambahkan dukungan untuk teks yang berkedip-kedip (dan juga akan bekerja pada emulator berbasis VTE lain juga).
egmont
1

Bagi yang tidak mendapatkan hasil yang layak selain bahasa yang disebutkan, jika Anda menggunakan C # untuk mencetak teks ke jendela konsol (terminal) Anda harus mengganti "\ 033" dengan "\ x1b ". Dalam Visual Basic akan Chrw (27) .

RandomRandom
sumber