Nico Golde <nico/at/ngolde.de>
O Autorze:
Obecnie Nico jest wci�� uczniem. Od kilku lat zajmuje si�
z determinacj� Linuksem, uczestniczy tak�e w kilku projektach
Open Source.
T�umaczenie na j�zyk polski:
B.J.F. Stobiecki <bjfs/at\op.pl>
Zawarto��:
|
Kolorowe Pow�oki -- U�ywanie kolorowych sekwencji wyj�cia ANSI
Notka:
W terminalu kompatybilnym ze standardem ANSI (jak xterm, rxvt,
konsole ...) tekst mo�e by� wy�wietlany w kolorach innych ni�
czer� i biel. Ten artyku� zademonstruje tekst pogrubiony
b�d� kolorowy.
_________________ _________________ _________________
|
Wprowadzenie
Na codzie� ka�dy u�ytkownik Linux styka si� z pow�ok� Bash.
Pocz�tkowo wydaje si� on bardzo nudny, ale jest wiele mo�liwo�ci
aby go zindywidualizowa�. Kolorowanie znaku zech�ty czyni pow�ok�
zar�wno lepsz� jak i bardziej czyteln�.
W swoim opisie b�de si� odwo�ywa� do pow�oki Bash. Sekwencje
wyj�cia mog� si� r�ni� w zale�no�ci od poszczeg�lnych terminali.
W tym artykule u�ywam terminal ANSI.
Konfiguracja Pow�oki
Ustawianie kolor�w pow�oki ma miejsce w osobistym pliku
konfiguracyjnym bash ~/.bashrc b�d� w globalnym pliku
konfiguracyjnym /etc/bashrc. Wygl�d znaku zach�ty jest
ustawiany przez zmienn� �rodowiskow� PS1 w bashrc.
Og�lnie, wpis powinien wygl�da� tak:
~/.bashrc: PS1="\s-\v\$ "
\s oznacza nazw� pow�oki, a -\v oznacza jej wersj�. Na ko�cu
znaku zach�ty ustawiamy $. Poniewa� jest to do�� nudne, nast�puj�cy
wpis - kt�ry jest domy�lny dla wi�kszo�ci dystrybucji Linux - mo�e
by� u�yty:
~/.bashrc: PS1="\u@\h \w \$ "
|
Oznacza to u�ytkownik@ obecny_katalog $. Jest to znak zach�ty,
z kt�rym wi�kszo�� u�ytkownik�w Linux jest obeznana.
Sekwencje Wyj�cia
Aby doda� osobisty urok koloruj�c znak zach�ty, b�dziemy u�ywali
sekwencji wyj�cia. Sekwencja wyj�cia jest instrukcj�
kontroln�, kt�ra nakazuje pow�oce wykonanie okre�lonego kroku.
Sekwencja wyj�cia z regu�y zaczyna si� od znaku ESC (st�d nazwa)
[po angielsku sekwencja wyj�cia nazywa si� escape sequence, przyp.
t�um.]. W pow�oce pokazywana jest jako ^[. Taki styl pisania wymaga
przyzwyczajenia, \033 oznacza to samo (ESC w ASCII jest dziesi�tnie
27, kt�re �semkowo daje 33).
Aby bezpo�rednio w pow�oce wprowadzi� sekwencj� wyj�cia mo�emy
j� poprzedzi� poprzez ctrl-v: CTRL-v ESC
U�ywanie Kolor�w Pow�oki
Wyt�umacz� kolory pow�oki z przyk�adowym znakiem zach�ty.
~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
Wy�wietla to ca�y znak zach�ty w zieleni. Jak tutaj:
\033 rozpoczyna sekwencj� wyj�ciow�, z [ zaczynamy definicj�
kolor�w. Nast�puj�ce 0 okre�la domy�ln� szeroko�� czcionki.
Inne mo�liwo�ci odno�nie tego przedstawi� p�niej. Ci�g znak�w
b�dzie otoczony w \[ i \] , aby powstrzyma� tekst sekwencji
wyj�ciowej przed pokazywaniem si� na pow�oce i zajmowaniu
zbyt wiele miejsca.
Nast�pnie wybierzemy kolor pierwszego planu (w tym przypadku
32, kt�re oznacza ziele�). Kolor t�a 40 okre�la czer�. Aby
powstrzyma� tekst po znaku zach�ty przed wy�wietlaniem si�
na zielono, zamkniemy sekwencj� wyj�ciow� poprzez \033[0m ,
kt�ry jest domy�lnym kolorem pow�oki. Dla pierwszego planu
jak i t�a mamy osiem kolor�w.
Do wyboru mamy: czerwony, zielony, ��ty, niebieski, karmazynowy,
turkusowy i bia�y. Kody kolor�w: 30 (czarny), 31 (czerwony), 32
(zielony), 33 (��ty), 34 (niebieski), 35 (karmazynowy),
36 (turkusowy), 37 (bia�y).
Ustawianie t�a jest bazowane na tej samej zasadzie, z tym, �e
zamiast pierwszej cyfry '3' u�ywamy '4', jak 40, 41, 42, 43, 44,
45, 46, 47.
Przyk�ad:
~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
To daje nam bardzo kolorowy znak zach�ty:
Aby wybr�bowa� te ustawienia u�yjemy export PS1="string",
p�niej mo�emy przenie�� je do .bashrc. M�j obecny znak
zach�ty wygl�da tak:
PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "
W�a�ciwo�ci Tekstu
Jak wcze�niej wspomina�em, '0' przed pierwsz� sekwencj� wyj�ciow�
jest domy�lnym ustawieniem koloru dla tekstu znaku zach�ty
pow�oki. Do w�a�ciwo�ci tekstu nast�puj�ce warto�ci maj�
znaczenie: 0, 1, 22, 4, 24, 5, 25, 7, 27, kt�re oznaczaj�:
domy�lny, pogrubiony, niepogrubiony, podkre�lony, niepodre�lony,
mruganie, bez mrugania, inwersja, bez inwersji.
Za pomoc� nast�puj�cego skryptu pow�oki mo�emy dostrzec r�ne
kombinacje kolor�w.
#!/bin/sh
############################################################
# Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################
for attr in 0 1 4 5 7 ; do
echo "----------------------------------------------------------------"
printf "ESC[%s;Foreground;Background - \n" $attr
for fore in 30 31 32 33 34 35 36 37; do
for back in 40 41 42 43 44 45 46 47; do
printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back
done
printf '\n'
done
printf '\033[0m'
done
Skrypt ten mo�e by� �ci�gni�ty w postaci tar.gz z:
showansicol.tar.gz
Inne Zastosowanie
Mo�liwo�� ustawiania kolor�w pow�oki nie jest wy��cznie
u�yteczna do tworzenia �adniejszego znaku zach�ty pow�oki,
ale tak�e mo�e by� u�yteczny dla program�w pisanych na konsol�
tekstow�.
Do u�ywania kolor�w zastosowanie bibliotek takich jak slang,
lub ncurses by�oby potrzebne. Zwi�kszy�oby to jednak
wielko�� pliku binarnego. Ncurses ma zalet� w byciu bardziej
lub mniej niezale�ne od rodzaju terminala.
Przyk�ady w C
'Hello World' na zielono:
#include <stdio.h>
int main(void){
const char *const green = "\033[0;40;32m";
const char *const normal = "\033[0m";
printf("%sHello World%s\n", green, normal);
return 0;
}
Inn� u�yteczn� sekwencj� wyj�ciow� jest printf("\033[2J"),
ma ona ten sam efekt jak system(clear), lecz plik
nag��wkowy unistd.h mo�e by� wykluczony.
Z printf("\033[1K") mo�emy usun�� lini�.
Przyk�ady dla skrypt�w inicjuj�cych
Gdyby�my chcieli mie� kolorowe, czytelne potwierdzenie pomy�lnej
egzekucji skrypt�w inicjuj�cych /etc/init.d to mo�emy
zamiast prostego '.' zastosowa� sekwencj� wyj�ciow�.
To jest wyci�g ze skryptu inicjuj�cego cron:
#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0
case "$1" in
start) echo -n "Starting periodic command scheduler: cron"
start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "."
;;
Pomy�lna egzekucja cron b�dzie symbolizowana kropk�.
Kolorow� odmian� tego by�oby zastosowanie [Ok] poprzez zmian�
ci�gu echo, n.p.:
#!/bin/sh
# Start/stop the cron daemon.
test -f /usr/sbin/cron || exit 0
case "$1" in
start) echo -n "Starting periodic command scheduler: cron"
start-stop-daemon --start --quiet --exec /usr/sbin/cron
echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]"
;;
Zastosowanie tych zmian do wszystkich skrypt�w init jest
bardzo czasoch�onne. Chyba, �e u�yjemy sekwencji wyj�ciowej \033,
gdy� Ctrl-v nie jest interpretowane jako znak.
Komentarze
Komentarze, krytyk�, b��dy, itp. prosz� s�a� na "nico at
ngolde.de". Mi�ej zabawy...
Dyskusja dotycz�ca tego artyku�u
Komentarze do dyskusji:
<--, powr�t na stron� g��wn� tego wydania
2004-07-07, generated by lfparser version 2.46