<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
<!-- this stylesheet will later on be added by lfparser automatically: -->
<style type="text/css">
<!--
  pre { font-family:monospace,Courier }
  pre.code { font-family:monospace,Courier;background-color:#aedbe8; }
  p.code { width:80%; alignment:center; background-color:#aedbe8; 
        border-style:none; border-width:medium; border-color:#aedbe8; 
        padding:0.1cm ; text-align:left }
-->
</style>

    <title></title>
  </head>

  <body>
    <!--    <h1>Bunte Shells - Benutzung der Shellfarben</h1>-->

    <h1>Kolorowe Pow�oki -- U�ywanie kolorowych sekwencji wyj�cia ANSI</h1>

    <h4>ArticleCategory: Hardware</h4>
    SystemAdministration 

    <h4>AuthorImage:[Here we need a little image from you]</h4>
    <img src="../../common/images2/NicoGolde.jpg" alt=
    "[Photo of the Author]" width="136" height="207"> 

    <h4>TranslationInfo:[Author + translation history. mailto: or
    http://homepage]</h4>

    <p>original in de <a href="nospam:nico/at/ngolde.de">Nico
    Golde</a></p>

    <p>de to en <a href=
    "nospam:sept.sapins(at)verizon.net">J&uuml;rgen Pohl</a></p>
    
    <p>en to pl <a href="nospam:bjfs/at\op.pl">B.J.F. Stobiecki</a>
    </p>

    <h4>AboutTheAuthor:[A small biography about the author]</h4>

    <p>Obecnie Nico jest wci�� uczniem. Od kilku lat zajmuje si�
    z determinacj� Linuksem, uczestniczy tak�e w kilku projektach
    Open Source.</p>

    <h4>Abstract:</h4>
    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.

    <h4>ArticleIllustration:</h4>
    <img src="../../common/images2/illustration335.gif" alt=
    "ansi colors" hspace="10" width="220" height="139"> 

    <h4>ArticleBody:</h4>

    <h2>Wprowadzenie</h2>
    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�.<br>
    <br>
    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.

    <h2>Konfiguracja Pow�oki</h2>
    Ustawianie kolor�w pow�oki ma miejsce w osobistym pliku
    konfiguracyjnym bash <i>~/.bashrc</i> b�d� w globalnym pliku
    konfiguracyjnym <i>/etc/bashrc</i>. Wygl�d znaku zach�ty jest
    ustawiany przez zmienn� �rodowiskow� PS1 w <i>bashrc</i>.<br>
    <br>
    Og�lnie, wpis powinien wygl�da� tak: 
<table><tr><td>
<pre class="code">
~/.bashrc: PS1="\s-\v\$ "
</pre>
    \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:
<pre class="code">
~/.bashrc: PS1="\u@\h \w \$ "
</pre>
</td></tr></table>
    Oznacza to u�ytkownik@ obecny_katalog $. Jest to znak zach�ty,
    z kt�rym wi�kszo�� u�ytkownik�w Linux jest obeznana.
    
    <h2>Sekwencje Wyj�cia</h2>
    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).<br>
    <br>
    Aby bezpo�rednio w pow�oce wprowadzi� sekwencj� wyj�cia mo�emy
    j� poprzedzi� poprzez ctrl-v: <i>CTRL-v ESC</i>
    
    <h2>U�ywanie Kolor�w Pow�oki</h2>
    Wyt�umacz� kolory pow�oki z przyk�adowym znakiem zach�ty.
<pre class="code">
~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
</pre>
    Wy�wietla to ca�y znak zach�ty w zieleni. Jak tutaj:<br>

    <center>
      <table cellpadding="10" border="0">
        <tbody>
          <tr>
            <td colspan="1" bgcolor="#000000" rowspan="1"><font
            color="#00ff00">nico@ebrain:~$</font> </td>
          </tr>
        </tbody>
      </table>
    </center>
    <br>
    \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.<br>
    <br>
    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.<br>
    <br>
    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).<br>
    <br>
    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.<br>
    <br>
    Przyk�ad: 
<pre class="code">
~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
</pre>
    <br>
    To daje nam bardzo kolorowy znak zach�ty:<br>

    <center>
      <table cellpadding="10" border="0">
        <tbody>
          <tr>
            <td colspan="1" bgcolor="#000000" rowspan="1">
              <table cellpadding="0" border="0" cellspacing="0">
                <tbody>
                  <tr>
                    <td colspan="1" bgcolor="#0000ff" rowspan="1">
                    <font color="#ffffff">nico@</font></td>

                    <td colspan="1" bgcolor="#aa5500" rowspan="1">
                    <font color="#00ff00">ebrain:</font></td>

                    <td colspan="1" bgcolor="#ff3030" rowspan="1">
                    <font color="#aa5500">~$</font></td>
                  </tr>
                </tbody>
              </table>
            </td>
          </tr>
        </tbody>
      </table>
    </center>
    <br>
    Aby wybr�bowa� te ustawienia u�yjemy <i>export PS1="string"</i>,
    p�niej mo�emy przenie�� je do <i>.bashrc</i>. M�j obecny znak
    zach�ty wygl�da tak:
<pre class="code">
PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "
</pre>
    <br>

    <center>
      <table cellpadding="10" border="0">
        <tbody>
          <tr>
            <td colspan="1" bgcolor="#000000" rowspan="1"><b><font
            color="#0000ff">[</font> <font color=
            "#ff0000">nico@ebrain:~</font> <font color=
            "#0000ff">]</font></b> </td>
          </tr>
        </tbody>
      </table>
    </center>

    <h2>W�a�ciwo�ci Tekstu</h2>
    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.<br>
    <br>
    Za pomoc� nast�puj�cego skryptu pow�oki mo�emy dostrzec r�ne
    kombinacje kolor�w.
    
<pre class="code">
#!/bin/sh
############################################################
# Nico Golde &lt;nico(at)ngolde.de&gt; 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
</pre>
    Skrypt ten mo�e by� �ci�gni�ty w postaci <i>tar.gz</i> z: <a shape=
    "RECT" href=
    "../../common/src2/article335/showansicol.tar.gz">
    showansicol.tar.gz</a> 

    <h2>Inne Zastosowanie</h2>
    <br>
    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�.<br>
    <br>
    Do u�ywania kolor�w zastosowanie bibliotek takich jak <i>slang</i>,
    lub <i>ncurses</i> by�oby potrzebne. Zwi�kszy�oby to jednak
    wielko�� pliku binarnego. <i>Ncurses</i> ma zalet� w byciu bardziej
    lub mniej niezale�ne od rodzaju terminala.
    
    <h2>Przyk�ady w C</h2>
    'Hello World' na zielono: 
<pre class="code">
#include &lt;stdio.h&gt;
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;
}
</pre>
    Inn� u�yteczn� sekwencj� wyj�ciow� jest <i>printf("\033[2J")</i>,
    ma ona ten sam efekt jak <i>system(clear)</i>, lecz plik
    nag��wkowy <i>unistd.h</i> mo�e by� wykluczony.<br>
    <br>
    Z <i>printf("\033[1K"</i>) mo�emy usun�� lini�. 

    <h2>Przyk�ady dla skrypt�w inicjuj�cych</h2>
    Gdyby�my chcieli mie� kolorowe, czytelne potwierdzenie pomy�lnej
    egzekucji skrypt�w inicjuj�cych <i>/etc/init.d</i> to mo�emy
    zamiast prostego <i>'.'</i> zastosowa� sekwencj� wyj�ciow�.<br>
    <br>
    To jest wyci�g ze skryptu inicjuj�cego <i>cron</i>: 
<pre class="code">
#!/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 "."
;;

</pre>
    Pomy�lna egzekucja <i>cron</i> b�dzie symbolizowana kropk�.
    Kolorow� odmian� tego by�oby zastosowanie [Ok] poprzez zmian�
    ci�gu <i>echo</i>, n.p.:
<pre class="code">
#!/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\]"
    ;;
</pre>
    Zastosowanie tych zmian do wszystkich skrypt�w <i>init</i> jest
    bardzo czasoch�onne. Chyba, �e u�yjemy sekwencji wyj�ciowej \033,
    gdy� <i>Ctrl-v</i> nie jest interpretowane jako znak.

    <h2>Komentarze</h2>
    Komentarze, krytyk�, b��dy, itp. prosz� s�a� na "nico at
    ngolde.de". Mi�ej zabawy...
  </body>
</html>