Kolorowy terminal w UNIXie
cepa
Kolorowy UNIX czyli jak zrobic festyn z terminala :P
Od dawien dawna ludzkość nurtował problem wyświetlania
kolorowych znaków w terminalu unixowym...
Objawieniem okazały się kody ANSI kolorów!
Co to w ogóle jest ?
Kody ANSI kolorów to nic innego jak specjalne prefixy,
które interpretuje terminal i ustawia nam odpowiednie
parametry wyświetlania textu.
Każdy kod ANSI zaczyna się znakiem ESC czyli kodem
ASCII 27 (0x1B), następnie jest znak '[', numer kodu,
i znak 'm', czyli schemat wygląda tak (kolejne bajty):
ESC,'[',<numer textowo="textowo">,'m'
Jak używać kodów ANSII ?
Aby uzyskać jakiś efekt wystarczy użyć zwykłej funkcji
do zapisywania na standardowym wyjsciu (stdout), np:
printf("\x1b[1m moj text \n");
Powyższa funkcja powinna wyświetlić lekko pogrubiony
napis ' moj text '.
Standard oferuje nam następujące kody:
[0m - reset
resetuje wszystkie wczesniejsze ustawienia do
trybu domyślnego (czarno biały terminal)
[1m - bold on
włącza pogrubienie
[3m - italics on
włącza kursywa
[4m - underline on
włącza podkreślenie
[7m - inverse on
odwraca ustawienia kolorów, zamienia kolor tła
z kolorem textu i na odwrót
[9m - strikethrough on
włącza przekreślenie
[22m - bold off
wyłącza pogrubienie
[23m - italics off
wyłącza kursywe
[24m - underline off
wyłącza podkreślenie
[27m - inverse off
wyłącza tryb odwrócenia ustawień
[29m - strikethrough off
wyłącza przekreślenie
[30m - fg black
kolor textu - czarny
[31m - fg red
kolor textu - czerwony
[32m - fg green
kolor textu - zielony
[33m - fg yellow
kolor textu - żółty
[34m - fg blue
kolor textu - niebieski
[35m - fg magneta
kolor textu - magneta
[36m - fg cyan
kolor textu - cyan
[37m - fg white
kolor textu - biały
[39m - fg default
domyślny kolor textu (najczęściej biały)
[40m - bg black
kolor tła - czarny
[41m - bg red
kolor tła - czerwony
[42m - bg green
kolor tła - zielony
[43m - bg yellow
kolor tła - żółty
[44m - bg blue
kolor tła - niebieski
[45m - bg magneta
kolor tła - magneta
[46m - bg cyan
kolor tła - cyan
[47m - bg white
kolor tła - biały
[49m - bg default
domyślny kolor tła (najczęściej czarny)
I to by było na tyle, poniżej jest prosty program
wyświetlający kolorowy text.
UWAGA! Jeżeli wasz DOS lub Windows ma zainstalowany
sterownik ANSI to prawdopodobnie kolory ANSI będą
działać na tych systemach.
/* ANSI color codes examples */
#include <stdio.h>
const char ansi[] =
{
"\x1b[0m"
"\x1b[1m\x1b[30m\x1b[47m ___ ___ ___ \x1b[0m\n"
"\x1b[1m\x1b[30m\x1b[47m / /\\ /__/\\ / /\\ ___ \x1b[0m\n"
"\x1b[1m\x1b[30m\x1b[47m / /::\\ \\ \\:\\ / /:/_ / /\\ \x1b[0m\n"
"\x1b[1m\x1b[33m\x1b[44m / /:/\\:\\ \\ \\:\\ / /:/ /\\ / /:/ \x1b[0m\n"
"\x1b[1m\x1b[33m\x1b[44m / /:/~/::\\ _____\\__\\:\\ / /:/ /::\\ /__/::\\ \x1b[0m\n"
"\x1b[1m\x1b[33m\x1b[44m/__/:/ /:/\\:\\/__/::::::::\\/__/:/ /:/\\:\\\\__\\/\\:\\__ \x1b[0m\n"
"\x1b[1m\x1b[34m\x1b[42m\\ \\:\\/:/__\\/\\ \\:\\~~\\~~\\/\\ \\:\\/:/~/:/ \\ \\:\\/\\\x1b[0m\n"
"\x1b[1m\x1b[34m\x1b[42m \\ \\::/ \\ \\:\\ ~~~ \\ \\::/ /:/ \\__\\::/\x1b[0m\n"
"\x1b[1m\x1b[34m\x1b[42m \\ \\:\\ \\ \\:\\ \\__\\/ /:/ /__/:/ \x1b[0m\n"
"\x1b[1m\x1b[37m\x1b[41m \\ \\:\\ \\ \\:\\ /__/:/ \\__\\/ \x1b[0m\n"
"\x1b[1m\x1b[37m\x1b[41m \\__\\/ \\__\\/ \\__\\/ \x1b[0m\n"
"\x1b[1m\x1b[37m\x1b[41m \x1b[0m\n"
"\x1b[0m"
};
int main()
{
printf("%s\n", ansi);
return 0;
}
/* EOF */
Copyright (C) By CEPA 2005
cepa@o2.pl
www.cepa.one.pl
super :D naprawde przydatne :D
Małe uzupełnienie - ciągi kolorujące specyfikuje się tak: ZNAK_ESC[kody_formatum, gdzie kodów może być więcej i są one wtedy oddzielone średnikiem. Przykład - \033[00;01;32m - daje nam kolor jasnozielony. 00 jest po to, żeby zresetować wcześniejsze formatowanie, np. podkreślenie, którego w przykładzie nie chemy. Wszystkie podane kody są dobre, tylko trzeba je czytać nie jako [kodm, tylko jako samą liczbę - bo może ich być więcej pomiędzy [ a m. Pozdrawiam.
thx
strikethrough - tekst przekreślony
tyle ze nie zawsze jest to oplacalne :)
Przyda sie.. ale moim zdaniem wygodniej sie korzysta z biblioteki "ncurses.h" odrazu obsluga okienek, kolorow itp.