รายการลำดับหลีกสีของ ANSI


225

ในเทอร์มินัลส่วนใหญ่เป็นไปได้ที่จะเปลี่ยนสีเอาต์พุตโดยใช้\033ลำดับ ANSI escape

ฉันกำลังมองหารายการสีและตัวเลือกที่รองรับทั้งหมด (เช่นสว่างและกะพริบ)

เนื่องจากอาจมีความแตกต่างระหว่างเทอร์มินัลที่รองรับพวกมันฉันส่วนใหญ่สนใจลำดับที่สนับสนุนโดยเทอร์มินัลที่รองรับ xterm


ที่จริงคุณสามารถใช้สีใน windows cmd stackoverflow.com/questions/41207496/…
Joel

และจากMSDN
Joel

คำตอบ:


510

ลำดับการหลีกเลี่ยงของ 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 (มันไม่งี่เง่าที่ StackOverflow ไม่อนุญาตให้คุณใส่คำตอบในตารางที่เหมาะสมใช่ไหม?)

เอฟเฟกต์แบบอักษร

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

สี 2 บิต

คุณได้รับสิ่งนี้แล้ว!

สี 4 บิต

มาตรฐานที่ใช้สีของเทอร์มินัลเริ่มต้นด้วยตัวเลือกที่ จำกัด (4 บิต) ตารางด้านล่างแสดงค่า RGB ของพื้นหลังและสีพื้นหน้าที่ใช้สำหรับสิ่งเหล่านี้โดยเทอร์มินัลอีมูเลเตอร์:

ตารางสี ANSI ที่นำมาใช้โดยเครื่องจำลองต่างๆ

เมื่อใช้ข้างต้นคุณสามารถสร้างข้อความสีแดงบนพื้นหลังสีเขียว (แต่ทำไม?) โดยใช้:

\033[31;42m

11 สี (อันสลับฉาก)

ในหนังสือของพวกเขา "ข้อกำหนดสีพื้นฐาน: ความเป็นสากลและวิวัฒนาการ" เบรนต์เบอร์ลินและพอลเคย์ใช้ข้อมูลที่รวบรวมจากภาษาต่าง ๆ ยี่สิบภาษาจากตระกูลภาษาต่างๆ สีน้ำเงิน, น้ำตาล, ม่วง, ชมพู, ส้มและเทา

เบอร์ลินและเคย์พบว่าในภาษาที่มีสีน้อยกว่าหมวดหมู่สูงสุดสิบเอ็ดสีนั้นเป็นไปตามรูปแบบวิวัฒนาการเฉพาะ รูปแบบนี้เป็นดังนี้:

  1. ทุกภาษามีข้อกำหนดสำหรับสีดำ (สีเย็น) และสีขาว (สีสดใส)
  2. หากภาษามีคำสามคำภาษานั้นจะมีคำศัพท์สำหรับสีแดง
  3. หากภาษามีคำสี่คำภาษานั้นจะมีคำหนึ่งสำหรับสีเขียวหรือสีเหลือง (แต่ไม่ใช่ทั้งคู่)
  4. หากภาษามีคำศัพท์ห้าคำภาษานั้นจะมีคำศัพท์ทั้งสีเขียวและสีเหลือง
  5. หากภาษามีคำศัพท์หกคำภาษานั้นจะมีคำศัพท์สำหรับสีน้ำเงิน
  6. หากภาษามีคำศัพท์เจ็ดคำภาษานั้นจะมีคำศัพท์สำหรับสีน้ำตาล
  7. หากภาษามีคำศัพท์แปดคำขึ้นไปภาษานั้นจะมีคำศัพท์สำหรับสีม่วงชมพูส้มหรือเทา

นี่อาจเป็นสาเหตุที่เรื่องราวของวูล์ฟมีเพียงสีดำขาวและแดงเท่านั้น อาจเป็นเพราะเหตุใดคัมภีร์ไบเบิลไม่มีสีฟ้า Homer's Odysseyมีสีดำเกือบ 200 เท่าและขาวประมาณ 100 ครั้ง สีแดงปรากฏขึ้น 15 ครั้งในขณะที่สีเหลืองและสีเขียวปรากฏขึ้นเพียง 10 ครั้ง ( ข้อมูลเพิ่มเติมที่นี่ )

ความแตกต่างระหว่างภาษาก็น่าสนใจ: สังเกตความหลากหลายของคำสีที่แตกต่างกันที่ใช้โดยภาษาอังกฤษกับภาษาจีน อย่างไรก็ตามการขุดลึกลงไปในภาษาเหล่านี้แสดงให้เห็นว่าแต่ละคนใช้สีในรูปแบบที่แตกต่างกัน ( ข้อมูลเพิ่มเติม )

ชื่อภาษาจีนกับภาษาอังกฤษ  รูปภาพดัดแปลงมาจาก "muyueh.com"

โดยทั่วไปแล้วการตั้งชื่อการใช้และการจัดกลุ่มของสีในภาษามนุษย์นั้นมีเสน่ห์ ตอนนี้กลับไปที่การแสดง

สี 8 บิต (256)

เทคโนโลยีขั้นสูงและตาราง 256 สีที่เลือกล่วงหน้ามีให้บริการดังที่แสดงด้านล่าง

โหมดสี 256 บิตสำหรับ ANSI escape sequences

เมื่อใช้สิ่งเหล่านี้ด้านบนคุณสามารถสร้างข้อความสีชมพูได้เช่น:

\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

การสนับสนุนเทอร์มินัล "สีจริง" แสดงอยู่ที่นี่ที่นี่

ส่วนใหญ่ข้างต้นมาจากหน้า Wikipedia " รหัสหลบหนี 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[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"

ภาพพิมพ์นี้

สี ANSI แบบง่าย


4
ชุดรหัสการหลบหนีที่สมบูรณ์ของ ANSI: ascii-table.com/ansi-escape-sequences-vt-100.php
formixian

3
@giusti: ทั้งสองecho -e "\033[38;05;34;1mHi"และecho -e "\033[38;05;34m\033[1mHi"ทำงานให้ฉันแม้ว่าเอฟเฟกต์การลบรอยหยักทำให้การปรากฏตัวของสีเปลี่ยนไปเล็กน้อยภายใต้การมัดในเทอร์มินัลที่ฉันกำลังทดสอบสิ่งนี้อยู่
Richard

4
รหัส SGR ( \033[) เริ่มต้นด้วย 38 และ 48ควรแยกออกจากกันด้วยสงวนไว้:เป็นตัวคั่นย่อยแม้ว่าจะไม่ชัดเจนจากแหล่งข้อมูลหลักที่: ecma-international.org/publications/files/ECMA-ST/Ecma -048.pdfและitu.int/rec/... นอกจากนี้การตีความบางอย่างยังลืมรหัสพื้นที่สีในรูปแบบ2(16M-color RGB) / 3(16M- สี CMY) / 4(??? CMYK) - เช่นควร\033[38:2::255:255:255mเป็นพื้นหน้าสีขาว 16M ไม่ใช่\033[38:2:255:255:255m!
SlySven

2
เหตุผลที่ฉันไปเกี่ยวกับเรื่องนี้ก็คือรหัสโครงการMudletฉันมีการจัดการทั้งสองรูปแบบและเมื่อเร็ว ๆ นี้ฉันได้รับถึงข้อศอกของฉันในเรื่องนี้เพื่อให้มันทำงานได้ดีขึ้น ...
SlySven

4
ฉันแค่ต้องการค้นหารายการสี ANSI และใช้เวลามากเกินไปกับการอ่านบทความเกี่ยวกับ "คำศัพท์สีพื้นฐาน" ขอบคุณสำหรับความฟุ้งซ่านที่ยอดเยี่ยม! :)
mzuther

14

เกี่ยวกับ:

ECMA-48 - ฟังก์ชั่นการควบคุมสำหรับชุดตัวอักษรที่พิมพ์, ฉบับที่ 5 (มิถุนายน 1991) - มาตรฐานการกำหนดรหัสควบคุมสีที่เห็นได้ชัดว่าสนับสนุนโดย xterm

SGR 38 และ 48 เดิมถูกสงวนไว้โดย ECMA-48 แต่ได้รับการหล่อเลี้ยงไม่กี่ปีต่อมาในมาตรฐาน ITU, IEC และ ISO ซึ่งมีหลายส่วนและที่ (ในจำนวนอื่น ๆ ทั้งหมด) เป็นเอกสาร SGR ลำดับการควบคุม 38/48 สำหรับสีโดยตรงและสีที่จัดทำดัชนี :

มีคอลัมน์สำหรับ xterm ในตารางนี้ในหน้า Wikipedia สำหรับรหัสหลบหนี ANSI



4

มันเกี่ยวข้องกับเครื่องของคุณอย่างมาก VTE ไม่สนับสนุนการกระพริบตาหากคุณใช้gnome-terminal, tilda, guake, terminator, xfce4-terminalและอื่น ๆ ตาม VTE คุณจะไม่ได้มีการกระพริบตา
ถ้าคุณใช้หรือต้องการที่จะใช้ในพริบ VTE, xtermคุณต้องใช้
คุณสามารถใช้คำสั่ง infocmp พร้อมชื่อเทอร์มินัล:

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

VTE 0.52 / gnome-terminal 3.28 เพิ่มการรองรับข้อความที่กระพริบ (และมันจะทำงานในอีมูเลเตอร์ VTE อื่น ๆ ด้วย)
egmont

1

สำหรับคนที่ไม่ได้ผลลัพธ์ที่เหมาะสมนอกจากภาษาที่กล่าวถึงหากคุณใช้ C # เพื่อพิมพ์ข้อความลงในหน้าต่างคอนโซล (เทอร์มินัล) คุณควรแทนที่"\ 033"ด้วย"\ x1b " ใน Visual Basic มันจะChrW (27)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.