Lista sekwencji kolorów ANSI

Na większości terminali możliwe jest zabarwienie wyjścia za pomocą sekwencji wyjścia ANSI \033.

Szukam listy wszystkich obsługiwanych kolorów i opcji (takich jak jasny i migający).

Ponieważ prawdopodobnie istnieją różnice między obsługującymi je terminalami, interesują mnie głównie sekwencje obsługiwane przez terminale kompatybilne z xterm.

Author: Dave Jarvis, 2011-01-30

5 answers

Sekwencje escape ANSI, których szukasz, są podzbiorem wybranych wersji graficznych. Wszystkie one mają postać

\033[XXXm

Gdzie XXX jest szeregiem parametrów oddzielonych średnikami.

Aby powiedzieć, aby tekst był czerwony, pogrubiony i podkreślony (omówimy wiele innych opcji poniżej) w C można napisać:

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

W C++ używasz

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

W Python3 użyłbyś

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

I w Bash ' u używasz

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

Gdzie pierwsza część sprawia, że tekst jest czerwony (31), pogrubienie (1), podkreślenie (4) i ostatnia część usuwa to wszystko (0).

Jak opisano w poniższej tabeli, istnieje duża liczba właściwości tekstu, które można ustawić, takich jak śmiałość ,czcionka, podkreślenie, itp. (Czy nie jest to głupie że StackOverflow nie pozwala na umieszczenie odpowiednich tabel w odpowiedziach?)

Efekty Czcionki

kod efekt Uwaga
0 Reset / Normal wszystkie atrybuty wyłączone
1 pogrubienie lub zwiększenie intensywności
2 słaby (zmniejszona intensywność) nie jest szeroko wspierany.
3 Italic nie jest szeroko wspierany. Czasami traktowane jako odwrotne.
4 podkreślenie
5 Slow Blink mniej niż 150 na minute
6 Rapid Blink MS-DOS ANSI.SYS; 150 + na minutę; nie jest szeroko obsługiwany
7 [[reverse video]] zamień kolory pierwszego planu i tła
8 Ukryj nie jest szeroko wspierany.
9 przekreślone znaki czytelne, ale oznaczone do usunięcia. Niezbyt często obsługiwane.
10 Podstawowa(domyślna) czcionka
11–19 Alternatywna czcionka Wybierz alternatywną czcionkę n-10
20 Fraktur prawie nigdy nie wspierane
21 pogrubienie lub podwójne podkreślenie pogrubienie nie jest szeroko wspierane; podwójne podkreślenie prawie nigdy nie jest wspierane.
22 normalny kolor lub intensywność ani pogrubiony, ani słaby
23 Nie kursywa, Nie Fraktur
24 podkreślenie off nie pojedynczo lub podwójnie podkreślone
25 Blink off
27 Odwróć off
28 Reveal ukryj się
29 Nie skrzyżowane out
30–37 Ustaw kolor pierwszego planu Zobacz tabelę kolorów poniżej
38 Ustaw kolor pierwszego planu następne argumenty to 5;<n> lub 2;<r>;<g>;<b>, patrz poniżej
39 domyślny kolor pierwszego planu implementacja zdefiniowana (zgodnie ze standardem)
40–47 Ustaw kolor tła Zobacz tabelę kolorów poniżej
48 Ustaw kolor tła następne argumenty to 5;<n> lub 2;<r>;<g>;<b>, patrz poniżej
49 domyślny kolor tła implementacja zdefiniowana (zgodnie ze standardem)
51 oprawione
52
53 Overlined
54 Nie oprawione lub otoczone
55 nieprzezroczyste
60 podkreślenie ideogramu prawie nigdy nie wspierane
61 ideogram podwójne podkreślenie prawie nigdy nie wspierane
62 ideogram overline prawie nigdy nie wspierane
63 ideogram double overline prawie nigdy obsługiwane
64 znak naprężenia ideogramu prawie nigdy nie wspierane
65 atrybuty ideogramu wyłączone Resetuj efekty wszystkich 60-64
90–97 Ustaw jasny kolor pierwszego planu aixterm (Nie w standardzie)
100–107 Ustaw jasny kolor tła aixterm (Nie w standardzie)

2-bit Colours

Już to masz!

Kolory 4-bitowe

Standardy implementujące kolory terminali zaczynały się od ograniczonych (4-bitowych) opcji. W poniższej tabeli przedstawiono wartości RGB kolorów tła i pierwszego planu używanych przez różne emulatory terminali:

Tabela kolorów ANSI zaimplementowanych przez różne emulatory terminali

Korzystając z powyższego, możesz zrobić czerwony tekst na zielonym tle (ale dlaczego?"using": {]}

\033[31;42m

11 Kolorów (Interludium)

W książce " Basic Color Terms: Their Universality and Evolution", Brent Berlin i Paul Kay wykorzystali dane zebrane z dwudziestu różnych języków z różnych rodzin językowych, aby zidentyfikować jedenaście możliwych podstawowych kategorii kolorystycznych: biały, czarny, czerwony, zielony, żółty, niebieski, brązowy, fioletowy, różowy, pomarańczowy i szary.

[24]}Berlin i Kay odkryli, że w językach, w których jest mniej niż maksymalnie jedenaście kategorii kolorów, kolory podążały za określonym ewolucyjnym wzorcem. Wzór ten jest następujący:
  1. wszystkie języki zawierają określenia dla czerni (chłodne kolory) i bieli (jasne kolory).
  2. jeśli język zawiera trzy terminy, to zawiera termin czerwony.
  3. jeśli język zawiera cztery terminy, to zawiera termin zielony lub żółty (ale nie oba).
  4. jeśli język zawiera pięć terminów, to zawiera terminy zarówno dla Zielonego, jak i żółtego.
  5. jeśli język zawiera sześć terminów, to zawiera termin dla niebieskiego.
  6. Jeśli język zawiera siedem terminów, a następnie zawiera określenie brown.
  7. jeśli język zawiera osiem lub więcej terminów, to zawiera terminy dla fioletowego, różowego, pomarańczowego lub szarego.

Może dlatego historia Beowulf zawiera tylko kolory czarny, biały i czerwony. Być może dlatego Biblia nie zawiera koloru niebieskiego. Odyseja Homera zawiera prawie 200 razy czerń i około 100 razy Biel. Czerwony pojawia się 15 razy, a żółty i zielony tylko 10 razy. ( więcej informacji tutaj )

Różnice między językami są również interesujące: zwróć uwagę na obfitość wyrazów różnych kolorów używanych przez Angielski vs. Chiński. Jednak głębsze zagłębienie się w te języki pokazuje, że każdy z nich używa kolorów w odmienny sposób. ( więcej informacji )

Chińskie kontra angielskie nazwy kolorów. Obraz zaadaptowany z "muyueh.com"

Ogólnie rzecz biorąc, nazewnictwo, użycie i grupowanie kolorów w ludzkich językach jest fascynujące. A teraz wracamy do programu.

8-bit (256) colours

Zaawansowana technologia, a tabele 256 wstępnie wybranych kolorów stały się dostępne, jak pokazano poniżej.

256-bitowy tryb kolorów dla sekwencji ewakuacyjnych ANSI

Używając powyższych, możesz zrobić różowy tekst w następujący sposób:

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

I zrobić poranne niebieskie tło za pomocą

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

I, oczywiście, można połączyć te:

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

8-bitowe kolory są ułożone tak:

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

WSZYSTKIE KOLORY

Teraz żyjemy w przyszłości, a pełne RGB widmo jest dostępne za pomocą:

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

Możesz więc umieścić różowawy tekst na brązowym tle za pomocą

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

Wsparcie dla terminali" true color " jest wymienione tutaj .

Większość z powyższych jest zaczerpnięta ze strony Wikipedii " ANSI escape code".

Poręczny skrypt przypominający sobie

Ponieważ często próbuję sobie przypomnieć, jakie są kolory, mam poręczny skrypt o nazwie: ~/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"

To prints

Proste kolory ANSI

 637
Author: Richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-16 15:18:03

A może:

ECMA-48-Control Functions for Coded Character Sets, 5th edition (czerwiec 1991) - Standard definiujący kody kontroli kolorów, który najwyraźniej jest obsługiwany również przez xterm.

SGR 38 i 48 zostały pierwotnie zarezerwowane przez ECMA-48, ale zostały udoskonalone kilka lat później we wspólnym standardzie itu, IEC i ISO, który składa się z kilku części i który (wśród wielu innych rzeczy) dokumentuje sekwencje kontrolne SGR 38/48 dla direct colour i indeksowany kolor :

Jest kolumna dla xterm w tej tabeli na stronie Wikipedii dla ANSI escape codes

 15
Author: sinelaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-14 20:11:43
 10
Author: Palec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-20 12:02:57

Jest całkowicie powiązany z Twoim terminalem. VTE nie obsługuje blink, Jeśli używasz gnome-terminal, tilda, guake, terminator, xfce4-terminal i tak dalej według VTE, nie będziesz miał mrugnięcia.
Jeśli używasz lub chcesz używać blink na VTE, musisz użyć xterm.
Możesz użyć polecenia infocmp o nazwie terminala:

#infocmp vt100
#infocmp xterm
#infocmp vte

Na przykład:

# 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,
 5
Author: PersianGulf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-05 13:08:53

Dla tych, którzy nie uzyskują odpowiednich wyników innych niż wymienione języki, jeśli używasz C# do drukowania tekstu w oknie konsoli(terminal), powinieneś zastąpić "\033" z " \x1b ". W Visual Basic będzie to Chrw (27) .

 3
Author: HolyRandom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-23 14:32:09