Portál AbcLinuxu, 27. dubna 2024 04:38

Barevný a formátovaný text v terminálu

4. 3. 2010 | David Watzke
Články - Barevný a formátovaný text v terminálu  

V tomto článku se dozvíte, jak ovlivnit zobrazení výstupu programu na terminálu. Článek rozebírá především barvy a základní formátování.

Obsah

Většina un*xových emulátorů terminálu podporuje řídící (escape) sekvence ANSI, které slouží (mimo jiné) k formátování výstupu na textových terminálech.

Nejdříve si povíme něco k teorii a pak si ukážeme ukázky kódu v různých programovacích jazycích. Tato záležitost není multiplatformní a na Windows je třeba postupovat trochu jinak než na Linuxu a jiných unixových systémech. Ne každý emulátor terminálu má implementovánu podporu všech standardizovaných vlastností a aby toho nebylo málo, některé vlastnosti dokonce v různých terminálech dělají různé věci. To vám doufám postačí jako pádný důvod k tomu, abyste v případě, že použijete formátování ve svém programu, nezapomněli i na možnost formátování úplně vypnout.

Snad jsem vás ještě neodradil. V praxi to není až tak hrozné. Většinou budete chtít zřejmě používat jen základní možnosti formátování textu a s těmi není žádný problém na hojně používaných emulátorech terminálu.

Takže jak na to? Escapovací sekvence se tomu neříká jen tak pro nic za nic, escape je totiž znak, který tyto řídící sekvence zahajuje. Tedy ještě spolu se znakem „[“, který jej musí následovat. Této sekvenci znaků se říká zkratkou CSI, a to znamená Control Sequence Introducer/Initiator – česky iniciátor řídící sekvence. Za touto sekvencí následuje samotný příkaz. My se v tomto článku budeme zabývat pouze příkazem ovlivňujícím zobrazení textu na terminálu. Jeho předpis vypadá takto:

CSI a [;b] m

Mezery jsou v předpisu pouze pro přehlednost a hranatá závorka značí volitelnost. A co to znamená? CSI je zmiňovaná zahajovací sekvence, tedy ESC+[. Písmena „a“ a „b“ jsou parametry, které nahradíme za čísla. Za jaká? To záleží na tom, co od příkazu očekáváte. Možnosti jsou vypsané v tabulce níže. Za parametry je třeba dát písmeno „m“ tak, jak je.

A teď když konečně prozradím, jak napsat znak escape, tak si to budeme moci předvést. Máte tři možnosti, jak napsat escape, buď \033 (umístění znaku escape v ASCII tabulce zapsáno v osmičkové soustavě je 33), \x1b (umístění znaku v ASCII tabulce zapsáno v šestnáctkové soustavě je 1B) nebo \e (styl jazyka C), což je nestandardní (a někde nepodporovaný), ale poměrně rozšířený zápis (dostupný nejen v C).

\033[31mAhoj barevný světe!\033[0m
     ^^                         ^- vypne formátování
      `- zahájí výpis v červené barvě

Jak je vidět, v tomto případě používáme pouze parametr „a“ (z předpisu výše). Když použijeme zároveň i parametr „b“, můžeme nastavit dvě atributy najednou stylem „a;b“, takže to pak celé vypadá takto: \033[a;bm, přičemž za „a“ a „b“ dosadíme číselné hodnoty. Následuje výběr ze seznamu možných hodnot parametrů:

U výše zmíněných rozsahů hodnot není jasné, která hodnota náleží které barvě. Proto následuje tabulka barev:

číslo 0 1 2 3 4 5 6 7
barva   černá  červená zelená  žlutá  modrá  purpurová tyrkysová  bílá 

Přidám ještě několik ukázkových parametrů, abyste si mohli ověřit, že to celé chápete správně:

Ukázkové sekvence s oběma parametry:

Poznámka: Nikdy nezapomínejte ukončovat formátování pomocí \033[0m.

Nyní přejdeme k ukázkám z praxe.

Bash

link

V Bashi lze barevný text vypisovat pomocí příkazu echo s přepínačem -e.

echo -e "\033[31mAhoj barevný světe!\033[0m"

for((i = 0; i <= 7; i++))
do
	echo -e "(3$i) \033[3${i}mBarevný text\033[0m a (4${i}) \033[4${i}mbarevné pozadí…\033[0m"
done

barvy konsole barvy xterm

Python

link

V Pythonu můžete použít funkci print().

print("\033[32mZelený text\033[0m")

YELLOW = '\033[93m'
END = '\033[0m'

print(YELLOW + "Žlutý text!" + END)

Perl

link

V Perlu lze také použít funkci print().

my @colors = ("cerna", "cervena", "zelena", "zluta",
	      "modra", "purpurova", "tyrkysova", "bila");

do {
	my $number = 37 – $#colors;
	my $color = shift @colors;
	print "\033[${number}m${color}, \033[1mtucna ${color}\033[0m\n";
} while (@colors);

PuTTY na Symbianu je ukázkou toho, že ne všude všechny atributy fungují. (Tučný text se zobrazí jako normální.)

barvy putty symbian

C/C++

link

Lze použít funkce printf() z C nebo std::cout z C++.

/* C nebo C++ */
#include <stdio.h>
void vypis_tucne(const char* text)
{
	printf("\x1b[1m%s\x1b[0m\n", text);
}

/* C++ */
#include <iostream>
void vypis_tucne_cpp(std::string text)
{
	std::cout << "\e[1m" << text << "\e[0m\n";
}

Související články

Seriál: Unixové nástroje
Seriál: BASH
Seriál: Nebojíme se kompilace
Regulární výrazy
Bash: chytré doplňování

Odkazy a zdroje

Wikipedia: ANSI escape code
ANSI color codes
ANSI Color Codes in C++

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

Diskuse k tomuto článku

4.3.2010 07:52 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
V Konsoli je 8 - rudá, která je na černé lépe vidět. Škoda že není i v xterm.
4.3.2010 08:06 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
V jake konkretne?

Svetla/Bold cervena "\033[1;31m" je IMHO videt vsude dobre.

http://www.abclinuxu.cz/blog/idea/2008/7/ansi-ridici-sekvence
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.3.2010 08:32 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
V KDE Konsoli. Tučná je samozřejmě vidět lépe, ale já mluvil o standardní červené.
4.3.2010 08:37 xurfa
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
KDE? tu sračku ještě někdo používá?
4.3.2010 08:51 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Samozřejmě (nemluvím samozřejmě o experimentální 4ce ale o poslední stabilní verzi). Kwin dohromady s Kickerem je minimálně stejně dobrý než řada jiných DE/WM.
4.3.2010 10:21 Zopper | skóre: 15
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
KDE 4 mi jako experimentální už nepřijde. S 4.4 jsem se k němu zase vrátil, ač jsem s příchodem 4.0 odešel ke Gnome.
"Dlouho ještě chcete soudit proti právu, stranit svévolníkům?" Ž 82,2
4.3.2010 12:56 Xjmeno363
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
nápodobně!

Jinak nechápu proč se někdo snaží konzoli obarvit a vylepšit -> čeho chcete dosáhnout, chcete z toho udělat GUI v GUI?
4.3.2010 13:31 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Pretože to niekomu tak môže vyhovovať? Skús napr. kontrolovať diff (alebo skôr veľa diff-ov) a uvidíš, k čomu sú farby dobré (a určite veľa ľudí má pre farby aj iné použitie a to, že ich ty nepotrebuješ, im je úplne jedno).
5.3.2010 10:49 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Proč si myslíte že právě a jen GUI by mělo být barevné? Vždyť je to proti přírodě. I text a písmenka mají právo být barevné, nejen vobrázky a vomalovánky! Nejste vy nakonec rasista? :D
pavlix avatar 5.3.2010 12:29 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Tahle možnost je tu pro lidi, kteří chápou :).

Ne pro ty, co považují konzoli/terminál za sprosté slovo.

A ani proty, co považují černobílou konzoli za výraz nadřazenosti nad uživateli barevného gui.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
Roman Horník avatar 10.3.2010 06:59 Roman Horník | skóre: 8 | Seč
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Že by např. kvůli přehlednosti?

Mimochodem- nejseš ty náhodou *bunťák?
I'm only wearing black until they make something darker | Debian-Linux.cz | Debian fórum
4.3.2010 10:26 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Jaka verze KDE?
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.3.2010 10:47 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Funguje to v 3.5.10, asi i starších, a předpokládám že i v KDE4, ale zkoušet se mi to nechce.
5.3.2010 11:53 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
V KDE4 to prave nefunguje, proto jsem se ptal :)
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
9.3.2010 07:27 miREC
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
V kde 4.3.2 to funguje no problem
9.3.2010 08:19 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Příloha:
Asi jsem neco nepochopil.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
Marián Kyral avatar 9.3.2010 09:59 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Příloha:
Teď jsem to zkoušel v 4.4.1 a funguje. Bohužel poslední KDE 4.3.5 jsem upgradoval o víkendu, takže to už nevyzkouším. Možná to bude nějaká regrese. V 4.3.4 a 4.3.5 jich bylo několik. A i díky tomu jsem upgradoval.
9.3.2010 12:41 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Eh? Ale vzdyt ti to dela uplne to same. 8 proste neni barva, takze to udela bilou.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
Marián Kyral avatar 9.3.2010 12:53 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Aha, já se v tom ztratil. Stačilo mi, že to byla jiná bílá ;-)
4.3.2010 08:19 Radek
Rozbalit Rozbalit vše Nedělejte to
Odpovědět | Sbalit | Link | Blokovat | Admin
Ty jo, to je ale retro. Jistě zajímavá perlička, ale prosím prosím, opravdu to takhle nikdy v programech nedělejte. Vyrobíte úplně nepřenositelný program plný divokých nečitelných sekvencí. To si chytří lidé uvědomili už před více než 30 lety, když vytvořili věci jako termcap, terminfo a postupně řadu knihoven nad tím. Takže pokud chcete objevovat dávnou slávu textových terminálů zejména na Unixu, začal bych někde tam. Můžete třeba zkusit zadat na svém Linuxu echo $TERM a zamyslet se, co to asi znamená :-)
4.3.2010 08:21 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Nedělejte to
Jistě zajímavá perlička, ale prosím prosím, opravdu to takhle nikdy v programech nedělejte.
Uzasny nazor. Protoze to nekde nefunguje, tak to nebudu vubec pouzivat :-)
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.3.2010 09:19 flaxa
Rozbalit Rozbalit vše Re: Nedělejte to
ja jsem autora prispevku pochopil jinak. Dokonce bych rekl, ze autor je takovy don Quijote v oblasti vypocetni techniky jehoz vetrne mlyny jsou nestrukturovane programy vytvorene dnes generaci Excel-Word.

Dokonce jsem presvedcen, ze v jeho programech jsou nejen ty terminfo/termcap sequence , nybrz , ze je ma schovane ve funkcich, ktere nenesou nazev 'udelej_cervene' ale 'zvyrazni_stupen_1'.
4.3.2010 12:01 Jindřich Makovička | skóre: 17
Rozbalit Rozbalit vše Re: Nedělejte to
Používat funkce za tímhle účelem jsem v shellu neviděl nikdy, ale běžně se ANSI sekvence na začátku naládují do vhodně pojmenovaných proměnných ($BLUE, $BOLD $UL, $ERROR, atd.). Což je vhodné i v případě, že pohrdnete tput a napíšete tam ty sekvence natvrdo.
4.3.2010 13:00 Ivan
Rozbalit Rozbalit vše Re: Nedělejte to
Kline to pouzivejte, ale pouzivejte to to "spravnym" zpusobem. To vam treba neni divne, ze vystup z prikazu ls je barevny, ale pokud ho presmerujete do less-u, tak barvicky zmizi? Jakto, ze less nezobrazi ani barvicky ani escape sekvence?
4.3.2010 13:32 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Nedělejte to
V niekoľkých mojich skriptoch používam na ofarbovanie escape sekvencie a pri presmerovaní do súboru sa nepoužijú (pretože nie je problém urobiť funkciu, prípadne nastaviť premenné podľa toho, či je výstup niekam presmerovaný).
4.3.2010 13:37 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Nedělejte to
LOL, tak to je snad jasne, ze nebudu tlacit escape sekvence jinam nez na terminal.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
Fill avatar 4.3.2010 14:32 Fill | skóre: 19 | blog: Fill | Třebíč
Rozbalit Rozbalit vše Re: Nedělejte to
less se dá donutit, aby barvičky zachoval: less -R
pavlix avatar 5.3.2010 12:31 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Nedělejte to
Pak musíš ještě vstupní aplikaci donutit, aby barvičky používala (ls --color).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
4.3.2010 13:02 zulu
Rozbalit Rozbalit vše Re: Nedělejte to
Uzasna neschopnost pochopit psane slovo. Upozornil bych predevsim na _takhle_. Ale samozrejme si klidne natvrdo dratuj sekvence do kodu, uz jsme neco z tve produkce videli, takze nas dalsi cunarna neprekvapi.
4.3.2010 13:45 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Nedělejte to
Jenomze _TAKHLE_ se to dela z urciteho duvodu a to prave proto aby clovek nemusel pouzivat sadu knihoven.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.3.2010 08:49 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Nedělejte to
Ano, sekvene jako \E[0;1;4;5;7;8m^N by používal jen blázen, když tu jsou nové a lepší terminfo \E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,. Jen žertuji :)

Nevím ale když je v shellu něco jako "Ahoj ${cred}lidi${cnorm}" tak mi to až tak "plné divokých nečitelných sekvencí" nepřipadá.
4.3.2010 09:03 vencas | skóre: 32
Rozbalit Rozbalit vše Re: Nedělejte to
Souhlasim, taky jsem si rikal, kdyz jsem to cetl. Ovsem nikdy jsem to nedotahl do praxe, tj.jak neco podobneho napsat prenositelne -- krom toho, ze by se podle schopnosti terminalu (ktere mi poskytne terminfo) pak kod kosate vetvil s ruznymi excape sekvencemi.

Predstavoval bychsi neco jako termcap_set_attr(TERMCAP_RED | TERMCAP_BOLD); /*...*/ termcap_set_attr(TERMCAP_PLAIN);. Existuje to?
4.3.2010 13:20 zulu
Rozbalit Rozbalit vše Re: Nedělejte to
To sam termcap neumi, ale nad nim jsou treba curses (taky nekdy na pos.ani), kde na to mas has_colors(); init_pair(num, fg, bg); attron(COLOR_PAIR(num));
4.3.2010 13:35 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Nedělejte to
Knižnica curses je dostupná úplne všade?
Josef Kufner avatar 4.3.2010 18:47 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Nedělejte to
Ne, na mikrovlnce ji bohužel nemám... není totiž kompatibilní s otočným knoflíkem.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 4.3.2010 09:13 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Nedělejte to
Jojo, sice to celkem funguje, ale kdo ví na jakých terminálech to poběží a zda ten terminál vůbec bude umět barvičky. Chtělo by to ještě druhý díl o tom, jak to dělat správně (ncurses, tput, terminfo,…).
Hello world ! Segmentation fault (core dumped)
4.3.2010 08:28 pozortucnak | skóre: 21 | blog: vecny_windowsar
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Chjo nejak mi to nejde...

Chtěl bych toto echo -e '\033[32;40m' ale tučným písmem...
Jsem mimořádně obtížný případ
4.3.2010 08:35 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Tučná není vždy tučná, často je "jen" světlá. Prostě zvýraznění (něco jako v html emphasis).
David Watzke avatar 4.3.2010 18:53 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Tohle je ono?
echo -e '\033[32;40m\033[1mXXX\033[0m'
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
4.3.2010 08:30 pet
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Více v "man console_codes".

Zde popsané je v části "ECMA-48 Set Graphics Rendition", jinak je tam spousta jiných zajímavých a užitečných sekvencí.
Věroš avatar 4.3.2010 13:19 Věroš | skóre: 24 | blog: Co není v hlavě | 49.29 s.š., 16.54. v.d.
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
... což je ovšem pouze návod k Linuxové konzoli a nikoliv k obecnému terminálu.

Že se ty sekvence mezi nějakými terminály náhodou shodují, to je věc jiná.

PS: Včera jsem uklízel a našel jsem fotku sériového terminálu z 80 let. Tam červená fakt nefungovala a dělala nepořádek. Byl totiž černobílý....
Školím Ansible
4.3.2010 11:06 Karel Zak
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Pouzivat primo Esc sekvence neni moc chytre a psat je primo do C (apod.) programu je pak vylozeni blbe.
  man tput
  man terminfo
napriklad:
   echo "$(tput setaf 1) Red Text $(tput sgr0)"
Jinak barev muze byt daleko vice, napriklad xterm nema problem s 256 barvama,
   export TERM=xterm-256color
nebo
  xterm -tn xterm-256color
vlastikroot avatar 4.3.2010 17:57 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Jak to udělat přes telnet? Rád bych to pokud možno zakomponoval do toho mýho chat serveru.
We will destroys the Christian's legion ... and the cross, will be inverted
4.3.2010 11:08 TM
Rozbalit Rozbalit vše praxe
Odpovědět | Sbalit | Link | Blokovat | Admin
Autore, zkuste si třeba v Konsoli, xtermu apod...:
tput setb 1;tput setf 7;tput cup 10 10 ...
Uvidíte, že je zbytečné se trápit s Escape sekvencemi a ještě se starat, zda terminál danou možnost podporuje. Databáze Terminfa a příslušná knihovna to udělá za vás ;-)
vogo avatar 4.3.2010 11:15 vogo | skóre: 34 | blog: "Skládat papír"
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Nevím proč se všichni rozčilují, že umisťování sekvencí přímo do kódu je hnus, proč to má tedy třeba ls z coreutils také sekvence natvrdo v kódu? Mimochodem pacman-color je také vystavěn nad těmito barevnými sekvencemi. Jinak neuškodí detekce, zda stream, do kterého se zapisuje sekvence je opravu terminál... jinak potom přesměrování výstupu dopadá špatně...
Nejsem paranoidní, ale to ještě neznamená, že po mě nejdou.
4.3.2010 11:33 TM
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Protože na daném terminálu nemusí naše sekvence dělat přesně to co jsme zamýšleli, zatímco u nás doma to bylo OK. A také proto, že bychom měli používat nástroje, které nám systém nabízí a ne je obcházet. To že jsou k dispozici má svůj důvod.
Vůbec se nerozčiluji a autor doufám taky ne. Prostě se mu snažím předat svoji zkušenost.
David Watzke avatar 4.3.2010 11:38 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Vůbec se nerozčiluji a autor doufám taky ne. Prostě se mu snažím předat svoji zkušenost.
Tak to má bejt; diskuse má být o tom, co jsem zapomněl, atp. Pak je užitečná.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
4.3.2010 11:53 JS
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Je nekde nejaky standardni referencni popis vsech tech escape sekvenci? Neco jako RFC treba.
David Watzke avatar 4.3.2010 12:24 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Na wiki je stránka ANSI escape code. Jinak hledej standard ISO/IEC 6429 (link ukazuje na preview).
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
7.3.2010 08:28 ivan
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
www.vt100.net
4.3.2010 13:24 maertien(neprihlasen)
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
pekny clanek, thx
Marián Kyral avatar 4.3.2010 22:25 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Ono když se jednotlivé barvy nadefinují jako proměnné, tak se s tím hned pracuje mnohem lépe.

Barevný prompt:


$ cat bin/prompt 
#!/bin/bash                                        

##########
# prompt #
##########
# prompt is a template-like program designed to simplify the process of colourizing one's prompt.
# By analyzing the variables, it is easy to identify what ANSI colour sequences match up with which colour.
# Thus, modifying one's bash prompt is a simple matter of going through the variables and inserting the colour of choice.
#                                                                                                                        
# When the script is modified to your liking, you should place it a useful place (like ~/bin/).                          
# Then replace PS1="..." in your bootup file (~/.bashrc or ~/.bash_profile) with PS1=`~/bin/prompt` (those are backticks!)
#                                                                                                                         
# Only known to work as expected with bash                                                                                
#                                                                                                                         
# No licensing or copyright is placed on this script. Do with it as you wish.                                             

################################################
# THERE SHOULD BE NO NEED TO EDIT THIS SECTION #
################################################

#$normal will reset the colour to the default, use it to stop using a certain colour (see "prompt parts")
normal="\[\e[0m\]"                                                                                       

# # # # # # #
#BACKGROUNDS
# # # # # # #
blackbg=";40m\]"
redbg=";41m\]"
greenbg=";42m\]"
brownbg=";43m\]"
bluebg=";44m\]"
purplebg=";45m\]"
cyanbg=";46m\]"
greybg=";47m\]"

############################################################################################
# THERE SHOULD BE NO NEED TO EDIT THIS SECTION (UNLESS YOU DO NOT WANT A BLACK BACKGROUND) #
############################################################################################
# # # # # # #
#FOREGROUNDS
# # # # # # #
black="\[\e[0;30$blackbg"
redfaint="\[\e[0;31$blackbg"
greenfaint="\[\e[0;32$blackbg"
brownfaint="\[\e[0;33$blackbg"
bluefaint="\[\e[0;34$blackbg"
purplefaint="\[\e[0;35$blackbg"
cyanfaint="\[\e[0;36$blackbg"
greyfaint="\[\e[0;37$blackbg"

grey="\[\e[1;30$blackbg"
red="\[\e[1;31$blackbg"
green="\[\e[1;32$blackbg"
yellow="\[\e[1;33$blackbg"
blue="\[\e[1;34$blackbg"
pink="\[\e[1;35$blackbg"
cyan="\[\e[1;36$blackbg"
white="\[\e[1;37$blackbg"

##################################
# EDIT THIS STUFF TO YOUR LIKING #
##################################
# # # # # # #
#PROMPT PARTS
# # # # # # #
prompt_opening_brace="$yellow[$normal"
prompt_closing_brace="$yellow]$normal"

prompt_date="\d"
prompt_hostname_short="$blue\h$normal"
prompt_hostname_long="\H"
prompt_jobs="\j"
prompt_terminal="\l"
prompt_shellname="\s"
prompt_time_24="\t"
prompt_time_12="\T"
prompt_time_12_am_pm="\@"
prompt_username="$green\u$normal"
prompt_version="\v"
prompt_version_patchlevel="\V"
prompt_pwd_long="\w"
prompt_pwd_short="$red\W$normal"
prompt_history_number="\!"
prompt_session_number="\#"
prompt_usertype_sign="\\$"
prompt_git_branch="$white\$(__git_ps1)$normal"

# # # # # # # #
#FINAL PROMPT
# # # # # # # #
echo -n "$prompt_opening_brace$prompt_time_24 $prompt_username@$prompt_hostname_short $prompt_pwd_short$prompt_git_branch$prompt_closing_brace$prompt_usertype_sign "
Amarok avatar 9.3.2010 18:31 Amarok | skóre: 33 | blog: blogoblog
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Co kdyz nechci pozadi cerne (blackbg), ale pruhledne? Kdyz timhle skriptem nastavim prompt, tak ho mam na cernem pozadi, coz vypada spatne, jelikoz vsechen vystup mam jinak pruhledny (na pozadi urxvt terminalu mam grafiku).
GNUniverse - May the source be with you...
Marián Kyral avatar 9.3.2010 20:34 Marián Kyral | skóre: 29 | blog: Sem_Tam | Frýdek-Místek
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Zkus si tam přidat tento řádek a následně změnit $blackbg za $transparentbg
transparentbg="m\]"
Amarok avatar 17.3.2010 19:12 Amarok | skóre: 33 | blog: blogoblog
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Jde to, dik.
GNUniverse - May the source be with you...
Amarok avatar 5.3.2010 18:12 Amarok | skóre: 33 | blog: blogoblog
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Pekny strucny prehled/uvod. Nebylo by ale od veci zminit, ze je mozno v nekterych terminalech pouzivat i 256 barev + nejake priklady.
GNUniverse - May the source be with you...
Gilhad avatar 6.3.2010 01:14 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Máte dvě možnosti, jak napsat escape, buď \033 (umístění znaku escape v ASCII tabulce zapsáno v osmičkové soustavě je 33), \x1b (umístění znaku v ASCII tabulce zapsáno v šestnáctkové soustavě je 1B) nebo \e .....

Máme dvě možnosti: a, b nebo c ... :)
David Watzke avatar 6.3.2010 15:03 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
:-) to je tak, když něco měním po napsání
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
6.3.2010 18:18 aceman | skóre: 27
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokial viem tak minimalne v bashi sa toto formatovanie da zadavat v tvare ESC[ [i];a[;b]m , kde A (30-37) a B (40-47) su farby popredia a pozadia tak ako popisuje clanok. Intenzita farby I (0-8) sa zapisuje ako prvy nepovinny parameter. Clanok ale uvadza, ze hodnoty 0-8 by mohli byt zapisane do parametra A. Resp. ak sa do A zapise intenzita a potom do B farba popredia, clanok nespomina moznost tretieho parametra kam sa zada farba pozadia. Ako to teda je?
David Watzke avatar 9.3.2010 15:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Když chceš tři věci najednou, musíš to udělat takhle:
\e[A;Bm\e[Cm   tradáá   \e[0m
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
9.3.2010 20:34 aceman | skóre: 27
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Vsimnite si, ze aj predchadzajuci prispevok s vypisom kodu skriptu prompt jma definicie v tvare \e[A;B;Cm , kde A a B su povinne, C nepovinne. A = intenzita, B=popredie, C=pozadie. A ide o bash. Zeby to teda bolo v roznych programoch rozdielne?
David Watzke avatar 9.3.2010 21:15 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
Hm, to nevím, ale funguje mi to. O tom jsem ani nevěděl, abych pravdu řek. Ono to ale není že A, B, C má nějaký pořadí, můžeš to tam nacpat jak chceš.
# 3x to samý
\e[1;33;43m
\x1b[33;1;43m
\033[43;1;33m
Evidentně tam lze zadat libovolný množství parametrů.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
15.3.2010 20:40 aceman | skóre: 27
Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
To by davalo zmysel. Mozno preto su jednotlive hodnoty z roznych intervalov a potom su jednoznacne bez ohladu na poradie.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.