<Poprzedni | Spis treści | Następne>
Przesuwanie kursora
Kody ucieczki mogą być używane do pozycjonowania kursora. Jest to powszechnie używane do wyświetlania zegara lub innego rodzaju informacji w innym miejscu na ekranie, np. w górnym rogu za każdym razem, gdy wyświetlany jest monit. Oto lista kodów ucieczki, które pozycjonują kursor:
Tabela 13-4: Sekwencje wyjścia z ruchu kursora
Escape Code Action
\033[l;cH Przesuń kursor do linii l i kolumna c
\033[nA Przesuń kursor w górę n linie
\033[nB Przesuń kursor w dół n linie
\033[nC Przesuń kursor do przodu n znaków
\033[nD Przesuń kursor do tyłu n znaków
\033[2J Wyczyść ekran i przesuń kursor do lewego górnego rogu (linia 0, kolumna 0)
\033[K Wyczyść od pozycji kursora do końca bieżącego wiersza
\033[s Zapisz bieżącą pozycję kursora
\033[u Przywołaj zapisaną pozycję kursora
Używając powyższych kodów, zbudujemy monit, który rysuje czerwony pasek na górze ekranu zawierający zegar (wyświetlany żółtym tekstem) za każdym razem, gdy monit jest wyświetlany. Kod monitu to ten groźnie wyglądający ciąg:
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ "
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ "
Przyjrzyjmy się bliżej każdej części ciągu znaków, aby zobaczyć, co ona robi:
Przesuwanie kursora
Tabela 13-5: Podział złożonego ciągu poleceń
Sekwencja Akcja
Sekwencja Akcja
\[ Rozpoczyna sekwencję znaków niedrukowalnych. Celem tego jest umożliwienie bashowi prawidłowego obliczenia rozmiaru widocznego monitu. Bez dokładnego obliczenia funkcje edycji wiersza poleceń nie mogą poprawnie ustawić kursora.
\033[s Zapisz pozycję kursora. Jest to potrzebne do powrotu do lokalizacji monitu po narysowaniu paska i zegara na górze ekranu. Należy pamiętać, że niektóre emulatory terminali nie rozpoznają tego kodu.
\033[0;0H Przesuń kursor do lewego górnego rogu, czyli do wiersza 0, kolumny 0.
\033[0;41m Ustaw kolor tła na czerwony.
\033[K Wyczyść od bieżącej lokalizacji kursora (lewy górny róg) do końca linii. Ponieważ kolor tła jest teraz czerwony, linia jest czyszczona do tego koloru, tworząc nasz pasek. Zauważ, że czyszczenie do końca linii nie zmienia pozycji kursora, która pozostaje w lewym górnym rogu.
\033[1;33m Ustaw kolor tekstu na żółty.
\t Wyświetl aktualny czas. Chociaż jest to element „drukowalny”, nadal uwzględniamy go w niedrukowalnej części monitu, ponieważ nie chcemy, aby bash uwzględniał zegar podczas obliczania rzeczywistego rozmiaru wyświetlanego monitu.
\033[0m Wyłącz kolor. Dotyczy to zarówno tekstu, jak i tła.
\033[u Przywróć wcześniej zapisaną pozycję kursora.
\] Zakończ sekwencję znaków niedrukowalnych.
<\u@\h \W>\$ Ciąg znaków monitu.