Moduł Term::ANSIColor

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Co to jest

Moduł Term::ANSIColor pozwala mówiąc krótko ubarwić tekst wyświetlany na ekranie terminala.

color()

color() pobiera liste atrybutow oddzielanych spacją jako argumenty. Zwraca znaki specjalne ANSI odpowiadające tym atrybutom. Jednak tylko je zwraca, nic nie wypisuje. Wypisać musimy sami poleceniem print. Jest to tak zrobione by można było coś z tym dalej zrobić, przekazać do jakiejś zmiennej, uchwytu pliku itd.

Czas na przykład:

use Term::ANSIColor; print color 'underline cyan'; print "Ten tekst jest podkreślony i koloru cyan.\n"; print color 'reset'; print "Ten tekst jest normalny\n"; print color 'red on_yellow'; print "Czerwony na żółtym\n"; print color 'reset';

a tak to wygląda w terminalu:


Atrybuty

Możemy korzystać z następujących atrybutów:

Należy jednak zwrócić uwagę na to, że nie wszystkie terminale obsługują wszystkie atrybuty. Dotyczy to w szczególności: dark, blink i concealed.

Gdy ustawimy jakieś atrybuty przy użyciu color() należy pamiętać, że ustawienie to ma ważność dopóki go nie zresetujemy przy użyciu
print color 'reset';

colored()

colored() to alternatywa do color(). Pobiera jako pierwszy argument skalar, a jako drugi argument - dowolną liczbe atrybutów. Automatycznie resetuje ustawienia. Jest też możliwość przekazania jako pierwszy argument referencji do tablicy, a zawartość tej tablicy zostanie potraktowana jako atrybuty i kody kolorów. Natomiast reszta argumentów jako tekst do pokolorowania.

Najlepiej pokazać na przykładzie:

use Term::ANSIColor; print colored ("reverse\n", 'reverse'); print colored ['reverse blue on_green'], "reverse blue on_green.\n"; $bla="BLa bla bLA!\n"; print colored ($bla, 'black on_yellow'); $jutro="Jutro będzie futro!\n"; $pojutrze="A pojutrze już po futrze!\n"; print colored['green'], $jutro, $pojutrze;

A tak to wygląda w terminalu:


Domyślnie colored() stosuje początek i koniec napisu jako rozdzielniki (delimiters). Jednak, jeżeli chcemy je ustawić ręcznie, wystarczy ustawić zmienną $Term::ANSIColor::EACHLINE na chciany napis i ten napis będzie rozdzielnikiem (delimiter). Szczególnie może to być przydatne, gdy spodziewany rezultat posiada duzo nowych linii i używamy kolorów tła, gdyż często się zdarza, że terminal interpretuje ten kolor tła jako kolor domyślny dla następnej linii. Wtedy warto ustawić:

$Term::ANSIColor::EACHLINE="\n"

Import :constants

Istnieje jeszcze trzeci sposób korzystania z tego modułu.
Jeżeli zaimportujemy :constants poleceniem:

use Term::ANSIColor qw(:constants);

możemy bezpośrednio korzystać ze stałych: CLEAR, RESET, BOLD, DARK,UNDERLINE, UNDERSCORE, BLINK, REVERSE, CONCEALED, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, ON_BLACK, ON_RED, ON_GREEN, ON_YELLOW, ON_BLUE, ON_MAGENTA, ON_CYAN, oraz ON_WHITE.

Wtedy można napisać:

print BOLD BLUE ON_WHITE "Text", RESET, "\n";

zamiast:

print colored ("Text", 'bold blue on_white'), "\n";

Gdy używamy stałych i nie chce nam się wpisywać za każdym razem , RESET na końcu każdej linii wystarczy ustawić:

$Term::ANSIColor::AUTORESET=1;

Wtedy ustawienia będą zresetowane jeżeli po stałej nie postawimy przecinka. Czyli:

print BOLD BLUE "Text\n";

zresetuje display, natomiast:

print BOLD, BLUE, "Text\n";

już nie...

Przykład:

use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET=1; print REVERSE RED, "reverse red","\n"; print UNDERLINE MAGENTA "Ten tekst jest podkreślony i fioletowy.\n"; print "Ten tekst jest normalny.\n";

A tak to wygląda w terminalu:


uncolor()

uncolor() wykonuje odwrotną translację do color(), czyli zamienia znaki specjalne ANSI na napisy. Wystarczy zaimportować uncolor.

Przykład:

use Term::ANSIColor qw(uncolor); print uncolor '01;31', "\n";

wypisze: boldred

Dodatkowe informacje

Jak widać moduł ten jest BARDZO przydatny - ja już sobie nie wyobrażam życia bez niego ;) A oto oryginalna dokumentacja: http://search.cpan.org/~rra/ANSIColor-1.11/ANSIColor.pm, lub można też ją wyświetlić w terminalu poleceniem: perldoc Term::ANSIColor (jeżeli posiada się zainstalowanego perldoca) Jest tam między innymi tabelka z rozpiską jakie atrybuty na jakich terminalach działają.

Autorka opracowania

P.P.

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.