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.
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:
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:- wszystkie języki zawierają określenia dla czerni (chłodne kolory) i bieli (jasne kolory).
- jeśli język zawiera trzy terminy, to zawiera termin czerwony.
- jeśli język zawiera cztery terminy, to zawiera termin zielony lub żółty (ale nie oba).
- jeśli język zawiera pięć terminów, to zawiera terminy zarówno dla Zielonego, jak i żółtego.
- jeśli język zawiera sześć terminów, to zawiera termin dla niebieskiego.
- Jeśli język zawiera siedem terminów, a następnie zawiera określenie brown.
- 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 )
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.
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
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 :- Technologia informacyjna-Open Document Architecture (Oda) i interchange format: struktury dokumentów. T. 412. Międzynarodowy Związek Telekomunikacyjny.
- Technologia informacyjna-Open Document Architecture (Oda) i interchange format: Character content architectures. T. 416. Międzynarodowy Związek Telekomunikacyjny.
- Technologia informacyjna-otwarta architektura dokumentów (ODA) i Interchange Format: Character content architectures. ISO/IEC 8613-6: 1994. Międzynarodowa Organizacja Normalizacyjna.
Jest kolumna dla xterm w tej tabeli na stronie Wikipedii dla ANSI escape codes
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
Jest kilka ciekawszych wraz z pokrewnymi informacjami.
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,
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) .
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