Danh sách các chuỗi thoát màu ANSI


225

Trên hầu hết các thiết bị đầu cuối, có thể tô màu đầu ra bằng cách sử dụng \033chuỗi thoát ANSI.

Tôi đang tìm kiếm một danh sách tất cả các màu sắc và tùy chọn được hỗ trợ (như sáng và nhấp nháy).

Vì có thể có sự khác biệt giữa các thiết bị đầu cuối hỗ trợ chúng, tôi chủ yếu quan tâm đến các chuỗi được hỗ trợ bởi các thiết bị đầu cuối tương thích xterm.


Trên thực tế, bạn có thể sử dụng màu sắc trong windows cmd. stackoverflow.com/questions/41207496/
Joel

Và từ MSDN
Joel

Câu trả lời:


510

Các chuỗi thoát ANSI mà bạn đang tìm kiếm là tập hợp con Chọn đồ họa kết xuất. Tất cả đều có dạng

\033[XXXm

trong đó XXXcó một loạt các tham số được phân tách bằng dấu chấm phẩy.

Để nói, làm cho văn bản màu đỏ, đậm và gạch chân (chúng ta sẽ thảo luận về nhiều tùy chọn khác bên dưới) bằng C bạn có thể viết:

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

Trong C ++ bạn sẽ sử dụng

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

Trong Python3 bạn sẽ sử dụng

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

và trong Bash bạn sử dụng

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

trong đó phần đầu tiên làm cho văn bản màu đỏ ( 31), in đậm ( 1), gạch chân ( 4) và phần cuối xóa tất cả điều này ( 0).

Như được mô tả trong bảng bên dưới, có một số lượng lớn các thuộc tính văn bản bạn có thể đặt, chẳng hạn như độ đậm, phông chữ, gạch chân, & c. (Không phải là ngớ ngẩn khi StackOverflow không cho phép bạn đặt các bảng thích hợp trong câu trả lời sao?)

Hiệu ứng phông chữ

╔══════════╦════════════════════════════════╦═════════════════════════════════════════════════════════════════════════╗
║  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)                                              ║
╚══════════╩════════════════════════════════╩═════════════════════════════════════════════════════════════════════════╝

Màu sắc 2 bit

Bạn đã có cái này rồi!

Màu sắc 4 bit

Các tiêu chuẩn thực hiện màu đầu cuối bắt đầu với các tùy chọn giới hạn (4 bit). Bảng dưới đây liệt kê các giá trị RGB của màu nền và màu nền trước được sử dụng cho các giá trị này bởi nhiều trình giả lập đầu cuối:

Bảng màu ANSI được thực hiện bởi các trình giả lập thiết bị đầu cuối khác nhau

Sử dụng ở trên, bạn có thể tạo văn bản màu đỏ trên nền màu xanh lá cây (nhưng tại sao?) Bằng cách sử dụng:

\033[31;42m

11 màu (Một loại)

Trong cuốn sách "Điều khoản màu cơ bản: Tính quốc tế và sự tiến hóa của họ", Brent Berlin và Paul Kay đã sử dụng dữ liệu được thu thập từ hai mươi ngôn ngữ khác nhau từ một loạt các họ ngôn ngữ để xác định mười một loại màu cơ bản có thể có: trắng, đen, đỏ, xanh lục, vàng, xanh, nâu, tím, hồng, cam và xám.

Berlin và Kay nhận thấy rằng, trong các ngôn ngữ có ít hơn mười loại màu tối đa, các màu theo một mô hình tiến hóa cụ thể. Mẫu này như sau:

  1. Tất cả các ngôn ngữ chứa các thuật ngữ cho màu đen (màu mát) và trắng (màu sáng).
  2. Nếu một ngôn ngữ chứa ba thuật ngữ, thì nó chứa một thuật ngữ cho màu đỏ.
  3. Nếu một ngôn ngữ chứa bốn thuật ngữ, thì nó chứa một thuật ngữ cho màu xanh lá cây hoặc màu vàng (nhưng không phải cả hai thuật ngữ).
  4. Nếu một ngôn ngữ chứa năm thuật ngữ, thì nó chứa các thuật ngữ cho cả màu xanh lá cây và màu vàng.
  5. Nếu một ngôn ngữ chứa sáu thuật ngữ, thì nó chứa một thuật ngữ cho màu xanh.
  6. Nếu một ngôn ngữ chứa bảy thuật ngữ, thì nó chứa một thuật ngữ cho màu nâu.
  7. Nếu một ngôn ngữ chứa tám thuật ngữ trở lên, thì nó chứa các thuật ngữ cho màu tím, hồng, cam hoặc xám.

Đây có thể là lý do tại sao câu chuyện Beowulf chỉ chứa các màu đen, trắng và đỏ. Nó cũng có thể là lý do tại sao Kinh thánh không chứa màu xanh lam. Odyssey của Homer chứa màu đen gần 200 lần và màu trắng khoảng 100 lần. Màu đỏ xuất hiện 15 lần, trong khi màu vàng và màu xanh lá cây chỉ xuất hiện 10 lần. ( Thêm thông tin ở đây )

Sự khác biệt giữa các ngôn ngữ cũng rất thú vị: lưu ý đến việc sử dụng các từ màu riêng biệt được sử dụng bởi tiếng Anh so với tiếng Trung Quốc. Tuy nhiên, đào sâu hơn vào các ngôn ngữ này cho thấy mỗi ngôn ngữ sử dụng màu sắc theo những cách riêng biệt. ( Thêm thông tin )

Tên màu tiếng Trung vs tiếng Anh.  Hình ảnh được điều chỉnh từ "muyueh.com"

Nói chung, việc đặt tên, sử dụng và nhóm màu trong ngôn ngữ của con người rất hấp dẫn. Bây giờ, trở lại chương trình.

Màu 8 bit (256)

Công nghệ tiên tiến và các bảng gồm 256 màu được chọn trước trở nên khả dụng, như được hiển thị bên dưới.

Chế độ màu 256-bit cho chuỗi thoát ANSI

Sử dụng những điều trên, bạn có thể tạo văn bản màu hồng như vậy:

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

Và làm một nền màu xanh buổi sáng sớm bằng cách sử dụng

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

Và, tất nhiên, bạn có thể kết hợp những điều sau:

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

Các màu 8 bit được sắp xếp như vậy:

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

TẤT CẢ MÀU SẮC

Bây giờ chúng ta đang sống trong tương lai và phổ RGB đầy đủ có sẵn bằng cách sử dụng:

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

Vì vậy, bạn có thể đặt văn bản màu hồng trên nền màu nâu bằng cách sử dụng

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

Hỗ trợ cho thiết bị đầu cuối "màu thật" được liệt kê ở đây .

Phần lớn những điều trên được rút ra từ trang Wikipedia " Mã thoát ANSI ".

Một kịch bản tiện dụng để nhắc nhở bản thân

Vì tôi thường ở vị trí cố gắng nhớ màu sắc là gì, nên tôi có một tập lệnh tiện dụng có tên ~/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"

Bản in này

Màu ANSI đơn giản


4
Bộ mã thoát ANSI hoàn chỉnh: ascii-table.com/ansi-escape- resultences
vt

3
@giusti: Cả hai echo -e "\033[38;05;34;1mHi"và đều echo -e "\033[38;05;34m\033[1mHi"hoạt động với tôi, mặc dù các hiệu ứng phông chữ chống răng cưa đã làm cho sự xuất hiện của màu sắc thay đổi một chút dưới sự tô đậm trong thiết bị đầu cuối mà tôi đang thử nghiệm này.
Richard

4
Các \033[mã SGR ( ) bắt đầu bằng 38 và 48 phải được phân tách bằng mã tách riêng khác, :mặc dù điều này không hoàn toàn rõ ràng từ các nguồn chính tại: ecma-i Intl.org/publications/files/ECMA-ST/Ecma -048.pdfitu.int/rec/ trên . Ngoài ra, một số diễn giải quên Id không gian màu trong các biểu mẫu 2(16M màu RGB) / 3(CMM màu 16M) / 4(??? CMYK) - ví dụ: nó nên \033[38:2::255:255:255mdành cho tiền cảnh 16M màu trắng chứ không phải \033[38:2:255:255:255m!
SlySven

2
Lý do tôi tiếp tục về vấn đề này là vì dự án Mudlet mà tôi viết mã phải xử lý cả hai hình thức và gần đây tôi đã đạt được khuỷu tay của mình để làm cho nó hoạt động tốt hơn ...
SlySven

4
Tôi chỉ muốn tìm một danh sách các màu ANSI và dành quá nhiều thời gian cho việc đọc các bài viết về "thuật ngữ màu cơ bản". Cảm ơn sự phân tâm lớn! :)
mzuther

14

Làm thế nào về:

ECMA-48 - Các chức năng điều khiển cho các bộ ký tự được mã hóa, phiên bản thứ 5 (tháng 6 năm 1991) - Một tiêu chuẩn xác định mã kiểm soát màu, rõ ràng cũng được xterm hỗ trợ.

SGR 38 và 48 ban đầu được bảo lưu bởi ECMA-48, nhưng đã được bổ sung một vài năm sau đó trong một tiêu chuẩn chung của ITU, IEC và ISO, bao gồm một số phần và (trong số rất nhiều thứ khác) ghi lại SGR 38/48 trình tự kiểm soát cho màu trực tiếpmàu được lập chỉ mục :

Có một cột cho xterm trong bảng này trên trang Wikipedia cho mã thoát ANSI



4

Nó hoàn toàn liên quan đến thiết bị đầu cuối của bạn. VTE không hỗ trợ chớp, Nếu bạn sử dụng gnome-terminal, tilda, guake, terminator, xfce4-terminalvà vân vân theo VTE, Bạn sẽ không có chớp.
Nếu bạn sử dụng hoặc muốn sử dụng nháy trên VTE, Bạn phải sử dụng xterm.
Bạn có thể sử dụng lệnh infocmp với tên thiết bị đầu cuối:

#infocmp vt100 
#infocmp xterm 
#infocmp vte 

Ví dụ :

# 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,

VTE 0.52 / gnome-terminal 3.28 thêm hỗ trợ cho văn bản nhấp nháy (và do đó, nó cũng sẽ hoạt động trong các trình giả lập dựa trên VTE khác).
egmont

1

Đối với những người không nhận được kết quả phù hợp ngoài các ngôn ngữ được đề cập, nếu bạn đang sử dụng C # để in văn bản vào cửa sổ bảng điều khiển (thiết bị đầu cuối), bạn nên thay thế "\ 033" bằng "\ x1b ". Trong Visual Basic, nó sẽ là Chrw (27) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.