abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:33 | Komunita

    Je druhé úterý v říjnu a tedy všem čtenářkám AbcLinuxu vše nejlepší k dnešnímu Dni Ady Lovelace (Ada Lovelace Day), tj. oslavy žen zabývajících se přírodními vědami, technologiemi, inženýrstvím a matematikou (STEM).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    Byla vydána nová verze 2.47.0 distribuovaného systému správy verzí Git. Přispělo 83 vývojářů, z toho 28 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 00:11 | Nová verze Ladislav Hagara | Komentářů: 0
    včera 19:55 | Nová verze

    Programovací jazyk Python byl vydán v nové major verzi 3.13.0. Podrobný přehled novinek v changelogu.

    Ladislav Hagara | Komentářů: 0
    včera 17:11 | Zajímavý článek Ladislav Hagara | Komentářů: 4
    včera 15:22 | Pozvánky

    Konference LinuxDays 2024 proběhne již tento víkend 12. a 13. října v Praze. Na programu je spousta zajímavých přednášek a workshopů, zástup zajímavých osobností a stánky řady projektů: Fedora, openSUSE, vpsFree.cz, Mozilla, brmlab, OpenAlt a mnoho dalších. Vstup zdarma.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky Ladislav Hagara | Komentářů: 0
    6.10. 18:55 | Nová verze

    OpenRazer byl vydán ve verzi 3.9.0. Jedná se o svobodný software, ovladač a démon, umožňující nastavovat klávesnice, notebooky, myši, podložky pod myš, keypady, sluchátka a další zařízení od společnosti Razer na GNU/Linuxu.

    Ladislav Hagara | Komentářů: 0
    6.10. 01:55 | Nová verze

    Byla vydána verze 3.6 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.

    Ladislav Hagara | Komentářů: 40
    6.10. 00:33 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE.

    Ladislav Hagara | Komentářů: 1
    Rozcestník

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

    4. 3. 2010 | David Watzke | Návody | 17046×

    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ů:

    • 0 – vypne všechny atributy
    • 1 – tučný text
    • 4 – jednoduché podtržení
    • 5 – blikající text
    • 7 – prohodí barvy popředí a pozadí
    • 39 – nastaví výchozí barvu popředí
    • 49 – nastaví výchozí barvu pozadí
    • 30 až 37, 90 až 99 – nastavuje barvu popředí (jako proměnná „a“)
    • 40 až 47, 100 až 109 – nastavuje barvu pozadí (jako proměnná „a“)

    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ě:

    • 101 je světle červené pozadí (10 = světlé pozadí, 1 = červená)
    • 34 je modré popředí (3 = popředí, 4 = modrá)
    • 93 je světle žlutá

    Ukázkové sekvence s oběma parametry:

    • \033[31;42m – červený text (31) na zeleném pozadí (42)
    • \033[42;31m – totéž
    • \x1b[32;1m – tučný (1) zelený text (32)
    • \x1b[34;4m – podtržený (4) modrý text (34)
    • \e[101;34m – světle červené pozadí (101), modrý text (34)
    • \e[44;1m – modré pozadí (44), tučný text (1)

    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";
    }
    
           

    Hodnocení: 85 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    4.3.2010 07:52 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Barevný a formátovaný text v terminálu
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.