| ![[Photo of the Author]](../../common/images2/NicoGolde.jpg)  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