Sekwencje specjalne ANSI składają się z sekwencji znaków rozpoczynającej się od znaku Escape, postać 27. Następnym znakiem jest często (choć nie zawsze) nawias kwadratowy: [
Polecenie echo może wysyłać znaki zmiany znaczenia, jeśli określisz -e
i użyjesz \e
do zmiany znaczenia.
Standard ANSI definiuje 8 kolorów plus tryb jasności, dając w sumie 16 możliwości. Sekwencja jest następująca:
\e[<number>m
Gdzie <number>
jest jeden z:
Pierwszoplanowy:
- 30 czarny
- 31 czerwony
- 32 zielony
- 33 żółty
- 34 niebieski
- 35 magenta
- 36 Cyjan
- 37 Biały
Tło:
- 40 czarny
- 41 czerwony
- 42 zielony
- 43 Żółty
- 44 niebieski
- 45 magenta
- 46 Cyjan
47 Biały
0 Zresetuj wszystko
- 1 pogrubienie
Aby twój pierwszy plan był czerwony, a tło żółty:
$ echo -e "\e[31m\e[43m"
Aby włączyć pogrubienie:
$ echo -e "\e[1m"
Oczywiście możesz połączyć je wszystkie razem:
$ echo -e "\e[31m\e[43m\e[1m"
Istnieje wiele innych kodów ucieczki do robienia innych rzeczy.
Na przykład - wyczyść ekran i przesuń kursor w lewy górny róg:
$ echo -e "\e[2J\e[1;1H"
Co jest przydatne przy zmianie koloru:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Co zmieni kolory, wyczyści ekran i umieści kursor w lewym górnym rogu. Cóż, prawie w lewym górnym rogu. Echo umieszcza powrót karetki, więc przesuwa się wzdłuż linii. Możesz dodać -n
do echa, aby temu zapobiec, jeśli jesteś wybredny.
Jeśli wszystko zepsujesz i nie widzisz, co piszesz, możesz zresetować kolory terminala do normalnego, naciskając:
Ctrl+v
[
0
m
Return
Na nadzieję, że masz wiersz polecenia. Będzie krzyczeć na nieznane polecenie, ale będziesz mógł zobaczyć, co robisz ponownie.
echo -ne '\e[31;43m'
(zamiast powyższegoecho -e "\e[31m\e[43m"
).Pamiętaj, że nowoczesne Xterms obsługują 32-bitowy kolor!
Prosty przykład. Aby ustawić ładne ciemnofioletowe tło (hej, każdy dla siebie) o wartości # 53186f, wykonujesz:
Zauważ, że to natychmiast zmienia kolor całego okna, a nie tylko kolejnego tekstu. Jest to szczególnie przydatne do tego, aby okno wyraźnie się różniło po ssh'ing do serwera (na przykład). Umieść powyższe „echo” w swoim .bashrc, a twój terminal automatycznie zmieni kolory po zalogowaniu się na tym serwerze (ale nie zmieni się z powrotem po wylogowaniu z Ctrl-D)
Możesz spędzić GODZINY w sieci, szukając tego - większość dokumentów mówi tylko o oryginalnych 16 kolorach ANSI.
Źródła: http://www.steike.com/code/xterm-colors/ i http://rtfm.etla.org/xterm/ctlseq.html (patrz „Elementy sterujące systemu operacyjnego”)
Uwaga: powyższa sekwencja ucieczki jest ważna dla XTerms i może nie działać w przypadku innych implementacji emulatorów terminalu okienkowego typu „XTerm”, które mogą „wyglądać” jak XTerm. Na przykład „terminal gnome” lub „konsola” mają różne sekwencje specjalne lub mogą wcale nie wprowadzać zmiany kolorów.
źródło
Tak. Terminale ANSI obsługują kody ucieczki ANSI . Każdy
Control Sequence Introducer
(CSI
) kod w następującym formacie:Znak Ascii
27
(ESC
znak) lub1b
szesnastkowy, następnie lewy nawias kwadratowy, a następnie litera oznaczająca akcję, która ma zostać użyta.Należy pamiętać, że lista
;
oddzielnych parametrów może zostać dostarczona bezpośrednio przed<<<CODE>>>
parametrem.Teraz kolory używają podzbioru
CSI
kodów,Select Graphic Rendition
kodów. Są to w formie:SGR
Kod jest przekazywana jako parametr wCSI
. Odpowiednie dla twojego pytania sąSGR
kody 30-49. Kody 30–39 ustawiają kolor pierwszego planu. Kody 40–49 ustawiają kolor tła.Kody 38 i 48 są kodami specjalnymi. Są to te, które pozwalają na użycie wartości RGB. Ich format to:
Uwaga: alternatywne zastosowania obejmują
\x1b[<3 or 4>8;5;<web safe color index>m
. Przy takim użyciu istnieje zupełnie inne kodowanie kolorów. Aby uzyskać więcej informacji, zobacz link u góry tej odpowiedzi.Kody 39 i 49 ustawiają domyślne kolory pierwszego planu i tła, które są definiowane na zasadzie terminal-terminal.
W praktyce kolory 30–37 40–47 różnią się nieznacznie od tych, które podają na etykietach.
Aby uzyskać jasne kolory, należy użyć SGI odważne,
1
. Pogrubienie to mylące imię. Nie pogrubia czcionki. W rzeczywistości zwiększa jasność tekstu. Po zastosowaniu pogrubienia kolory stają się:Uwaga: ostatnie dwa bloki liczb kolorów odnoszą się zarówno do przedniego, jak i do tła (
<index> + (30 or 40)
).Aby usunąć wszystkie style (powrót do trybu domyślnego / normalnego), użyj
SGR
0.CSI
kody nie są wszystkie graficzne. Na przykładESC[2J
wyczyści twój terminal.ESC[<y>;<x>H
ustawia pozycję kursora (1-indeksowany). Więcej informacji znajduje się w artykule na Wikipedii.Uwaga: aby je przetestować, użyj
echo -e
lubprintf
.źródło
UWAGA: „^ [” jest znakiem ucieczki i jest wstawiany z CTRL-V, CTRL- [, a ^ G to znak dzwonka, wstawiany z CTRL-V, CTRL-G
Poniższy blok znajduje się w moim .bash_profile i zapewnia, że moje xtermy w tym systemie ZAWSZE są biało-czarne, nawet po zalogowaniu się do innego systemu, który mógł zmienić moje kolory.
źródło
sprawdź także projekt ScriptEchoColor
jest on w całości wykonany w skryptach bash
, ma tutaj pakiety dla Ubuntu ,
ale te skrypty można zainstalować na dowolnej dystrybucji, jeśli wiesz, jak to zrobić (najnowszą wersję można również pobrać z jej git).
możesz użyć skróconych lub rozszerzonych nazw kolorów, takich jak:
próbka:
Upewnij się także, że rzucisz okiem na xtermcontrol , aby uzyskać szerszą kontrolę nad samym xtermem (nie tylko postaciami).
źródło
Wśród wielu kodów ANSI CSI jest jeden o nazwie SGR lub Select Graphic Rendition. Jest to ESC,
[
parametry,m
gdzie parametrami są jedna lub więcej liczb całkowitych w formacie ASCII, oddzielone średnikami. Wiele różnych parametrów SGR znajduje się na powyższej stronie Wikipedii (choć nie dla wszystkich z nich szczegółowo).Niektóre parametry, takie jak
1
(pogrubienie lub zwiększenie intensywności) i31
(czerwony tekst) są niezależne i mogą być używane osobno lub łącznie, tak jak wESC[31m
lub wESC[1;31m
celu uzyskania odpowiednio czerwonego i pogrubionego czerwonego tekstu pierwszego planu.Inni sami przyjmują parametry, które są po prostu podawane po kodzie jako liczby oddzielone średnikami. Na przykład
ESC[38;5;219m
wyświetlałby tekst pierwszego planu w rozszerzonym kolorze o numerze 219 iESC[38;2;150;100;50m
wyświetlałby go w kolorze o wartości RGB 150, 100, 50. W tym przypadku38
jest to polecenie „rozszerzonego zestawu kolorów pierwszego planu”, po którym zawsze następuje podkomenda. Podkomenda2
przyjmuje trzy parametry, wartości składników czerwonego, zielonego i niebieskiego. Inaczej podkomenda5
przyjmuje tylko jedną wartość, liczbę od 0 do 255 określającą kolor z tabeli, w której skonfigurowany jest terminal.Następująca funkcja powłoki może być przydatna do używania tych kodów:
Możesz użyć tego w następujący sposób:
Zauważ, że jeśli nie podasz żadnych parametrów
sgr()
, domyślnie jest to kod SGR 0, co oznacza wyłączenie wszystkich atrybutów, resetowanie tekstu do wartości domyślnych dla tego terminalu.źródło
ESC[38
...m
iESC[38
...m
puszka / powinien (zależy od źródła informacji - ostateczny jeden byt, ja wierzę, itu.int/rec/T-REC-T.416-199303-I ) należy użyć, w przeciwnym razie zastrzeżony, znak:
(w celu oddzielenia elementów parametru ), aby;
był używany tylko między kompletnymi ciągami parametrów - tj.ESC[38;2;150;100;50m
powinien być zapisanyESC[38:2::150:100:50m
...2
i150
- ponieważ nikt, o czym jestem świadomy , nigdy nie zdefiniował, jaką wartość należy tam wprowadzić, należy użyć pustej wartości domyślnej - ale często jest pomijany a użycie tylko;
jako separatora uniemożliwia niezawodne przetwarzanie informacji zgodnie ze specyfikacją.