<Poprzedni | Spis treści | Następne>
Dodawanie koloru
Większość programów emulatora terminala reaguje na pewne niedrukowalne sekwencje znaków, aby kontrolować takie rzeczy jak atrybuty znaków (jak kolor, pogrubiony tekst i przerażający migający tekst) i pozycję kursora. Zajmiemy się pozycją kursora za chwilę, ale najpierw zajmiemy się kolorem.
Końcowe zamieszanie
W starożytności, gdy terminale były podłączone do zdalnych komputerów, istniało wiele konkurujących marek terminali i wszystkie działały inaczej. Miały różne klawiatury i wszystkie miały różne sposoby interpretowania informacji sterujących. Systemy Unix i podobne do Unix mają dwa dość złożone podsystemy do radzenia sobie z bałaganem sterowania terminalem (tzw. termcap oraz termino). Jeśli zajrzysz w najgłębsze zakamarki ustawień emulatora terminala, możesz znaleźć ustawienie dla typu emulacji terminala.
Aby terminale mogły mówić wspólnym językiem, Amerykański Narodowy Instytut Normalizacyjny (ANSI) opracował standardowy zestaw sekwencji znaków do sterowania terminalami wideo. Starzy użytkownicy DOS-a pamiętają AN-SI.SYS plik, który umożliwił interpretację tych kodów.
Kolor znaku jest kontrolowany poprzez wysłanie do emulatora terminala Kod wyjścia ANSI osadzony w strumieniu znaków do wyświetlenia. Kod sterujący nie jest „wydrukowywany” na wyświetlaczu, lecz jest interpretowany przez terminal jako instrukcja. Jak widzieliśmy w tabeli powyżej, \[ oraz \] sekwencje służą do enkapsulacji znaków niedrukowalnych. Kod ucieczki ANSI zaczyna się od ósemkowej liczby 033 (kod generowany przez klawisz ucieczki), po którym następuje opcjonalny atrybut znaku, a następnie instrukcja. Na przykład kod ustawiający kolor tekstu na normalny (atrybut = 0), czarny tekst to:
\033[0;30m
Oto tabela dostępnych kolorów tekstu. Zauważ, że kolory są podzielone na dwie grupy, rozróżniane przez zastosowanie atrybutu pogrubienia (1), który tworzy wygląd „jasnych” kolorów:
Tabela 13-2: Sekwencje wyjścia używane do ustawiania kolorów tekstu
Sekwencja | Kolor tekstu | Sekwencja | Kolor tekstu |
\033[0;30m | Czarny | \033[1;30m | Ciemny szary |
\033[0;31m | Czerwony | \033[1;31m | Światło czerwone |
\033[0;32m | Zielony | \033[1;32m | Green Light |
\033[0;33m | Ryż Basmati Brązowy | \033[1;33m | Żółty |
\033[0;34m | Niebieski | \033[1;34m | Jasnoniebieski |
\033[0;35m | Fioletowy | \033[1;35m | Jasny fiolet |
Dodawanie koloru
\033[0;36m | Cyan | \033[1;36m | Jasnobłękitny |
\033[0;37m | Jasnoszary | \033[1;37m | Biały |
Spróbujmy zrobić czerwony monit. Wstawimy kod ucieczki na początku:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
To działa, ale zauważ, że cały tekst, który wpisujemy po monicie, jest również czerwony. Aby to naprawić, dodamy kolejny kod ucieczki na końcu monitu, który nakaże emulatorowi terminala powrót do poprzedniego koloru:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
Tak jest lepiej!
Można również ustawić kolor tła tekstu za pomocą kodów wymienionych poniżej. Kolory tła nie obsługują atrybutu pogrubienia.
Tabela 13-3: Sekwencje wyjścia używane do ustawienia koloru tła
Sekwencja | Kolor tła | Sekwencja | Kolor tła |
\033[0;40m | Czarny | \033[0;44m | Niebieski |
\033[0;41m | Czerwony | \033[0;45m | Fioletowy |
\033[0;42m | Zielony | \033[0;46m | Cyan |
\033[0;43m | Ryż Basmati Brązowy | \033[0;47m | Jasnoszary |
Możemy utworzyć monit z czerwonym tłem, stosując prostą zmianę w pierwszym kodzie wyjścia:
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~>$
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
<me@linuxbox ~>$
Wypróbuj kody kolorów i zobacz, co możesz stworzyć!
Uwaga: Oprócz normalnych (0) i pogrubionych (1) atrybutów znaków, tekstowi można również nadać atrybuty podkreślenia (4), migania (5) i odwrócenia (7). W interesie dobrego smaku wiele emulatorów terminali odmawia jednak honorowania atrybutu migania.