Színek mélykonzolban és terminálemulátorban

Fórumok

Sziasztok, az a kérdésem, hogy ha valamit ki akarok íratni (mondjuk printf-fel) a terminálra, akkor miként tudom változtatni annak a szövegnek a színét? Gondolom, kéne legyen rá valami színkódszerűség...

Hozzászólások

ansi escape sequence-ekkel
pl.:
^[[31;1mpiros^[[0m

arra vigyazz, hogy ^[ nem ket karakter, hanem egy literalis escape
igy viszed be: ctrl-v esc

--
Unix, Perfectly "natural" after five or ten years.

Igen, hát efféle szekvenciákat sokat láttam már - a baj az, hogy nem értem, mit jelent! Az odáig világos, hogy az első karakter egy Esc - asszem 27 a kódja talán decimálisan, de ha nem az is mindegy, annak utána tudok nézni. Hanem az utána következő mindenfélét nem értem! Ugye, az én csekélyértelmű medvebocs-fejemnek az lenne a logikus, hogy az Esc azt jelentse, hogy valami speciális parancsot küldünk - utána jöjjön valami, ami azt mondja, hogy most konkrétan színkódot adok meg (és nem mondjuk kurzormozgatást vagy konzolcsengő bekapcsolást), aztán jön a szín kódja, aztán a kiiratandó szöveg, ami egészen addig megtartja ezt a színét, míg csak nem mondunk neki valami más színkódot!

No és ebből úgy látom odáig oké, hogy az Esc speciális parancsot vezet be; utána azonban egymerő káosznak tűnik számomra az egész, főleg 2 okból: mi a fene az az "m" karakter az elején?! És a végén?! Nézegettem pár gobo-szkriptet, amik színesen írnak ezt-azt, de még abból sem értem, mert mindig más kódokkal zárják le a színes szöveg sorozatát! Holott már azt sem értem, minek azt lezárni, mert ha lezárjuk, utána milyen színnel fog írni a masina, ha egyszer nem adtunk meg neki újabb színkódot?!

Szóval ez nekem momentán magas. Pedig itt kifejezetten még nem is az angol szöveg nem-magyarságával van bajom, mert aránylag könnyű, de az egésznek a logikája tök homály előttem. Tiszta röhej, hogy ennyire elhasaltam a színeken, amikor ennél sokkal nehezebb dolgokat szerintem könnyen megértettem. (nem mindent, de volt már rá példa...)

Szerintem valahogy túlbonyolították ezt a témát a tervezők. Biztos meg lehet magyarázni, de egyelőre bizánci bonyolultságú az egész miskulancia nekem.

Az már csak hab a tortán, hogy ilyen idióta jelekkel kell kínlódni. Írják ki nekem mindegyik kódot hexában, az egyértelmű! Messze sokkal könnyebben átlátom azt.

(OFF itt, de megjegyzem, egyetlen dolog van, amit utálok a C-ben, de azt vastagon ám: hogy a 0x karaktersorozattal vezeti be a hexa számokat. Megszoktam még a C-64 idejében, hogy a $ előtét a hexa számok jele. Ráadásul az egyetlen karakter, nem kettő, mint a 0x. Hogy én ezt mennyire utálom a C nyelvben!)

-------------
:::A GoboLinux felhasználók hivatalos magyar fóruma: http://linux.birodalom.net/smf
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

> Hanem az utána következő mindenfélét nem értem!

A jelölés alkalmazásához nem szükséges a jelölés megértése.

> odáig oké, hogy az Esc speciális parancsot vezet be; utána azonban

Esc [ paraméterek műveletkód

> hogy a 0x karaktersorozattal vezeti be a hexa számokat

Egy már meglévő jelölési mód újrahasznosítása, a legkisebb változtatás elvének megfelelően. A '0' jelöli, hogy nem 10-es számrendszerbeli literál, az x pedig azt jelöli hogy nem oktális, hanem hexa.

> Megszoktam még a C-64 idejében, hogy a $ előtét a hexa számok jele.

Akkor ez a baj. Öreg kutya nem tanul új trükköt? :-)))

A jelölés alkalmazásához igenis szükséges a megértése, mert pld így nem értem, melyik kódnak mi a hatása. Pld hogyan van lezárva a parancsstring, stb.

Nem lehetne hogy egyszerűen hexakódokkal csinálna valaki egy táblázatot a 16 színre, hogy "hé lamerkám, ilyen színnél ez a parancs eleje, aztán jön a szöveg amit ki akarsz iratni, utána meg ez"?!

Plíz hexakódokkal, oké? Hagyjuk a szegletes zárójeleket...

-------------
:::A GoboLinux felhasználók hivatalos magyar fóruma: http://linux.birodalom.net/smf
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

> nem értem, melyik kódnak mi a hatása. Pld hogyan van lezárva a parancsstring, stb.

Értelmezőt akarsz írni? Mert ha nem, akkor elég megnézni a kódokat valami leírásban. Pld: http://en.wikipedia.org/wiki/ANSI_escape_code

> "hé lamerkám, ilyen színnél ez a parancs eleje, aztán jön a szöveg amit ki akarsz iratni, utána meg ez"?!

Már kaptál ilyet: "elotte ^[[31;1m piros ^[[0m utana". Kipróbáltad?

> Plíz hexakódokkal, oké? Hagyjuk a szegletes zárójeleket...

Ezt mondod a HTML-re is? "Plíz hexakódokkal, oké? Hagyjuk a < > zárójeleket..."

Akkor most megleplek. Soha életemben nem használtam ansi.sys-t. Dos alatt úgy progranyoztam, hogy 800×600 16 színű grafikus képernyőre írtam assemblerben rutincsomagot, aminek rutinjait C-ből hívogattam.

Továbbá, mit gondolsz, miért a hup-on vagyok gyakrabban és nem a Linuxfórumon? Hát hogy pld megszabaduljak tőled! Szeretném tehát, ha nem eregetnéd teli az itteni légkört is mindenféle mentális piszokkal. Nagyon szépen kérlek, tégy úgy, mintha én nem is volnék! Nem muszáj észrevenned a témáimat, oké?! Inkább lemondok a "segítségről" is, amit nyújtanál.

-------------
:::A GoboLinux felhasználók hivatalos magyar fóruma: http://linux.birodalom.net/smf
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Asszem kipróbálom a megfelelő firefox extensiont, kiszűri-e a hozzászólásaidat. Egyelőre még nem voltál nagyon troll, de ismerlek már, és emiatt nekikészülök.
-------------
:::A GoboLinux felhasználók hivatalos magyar fóruma: http://linux.birodalom.net/smf
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Embertelen szerencséd van, mert megtaláltam egy kőkorszaki forrásomat, ami ilyenekkel szerencsétlenkedik...

Az esc kódja 0x1b. Ilyesmik vannak:


    printf("%cc",0x1b);//reset term
    printf("%c[2J",0x1b);//erase screen
    printf("%c[%d;%dH",0x1b,MAXROW-2,1);//cursor move (Row;Column)

Ezek gondolom elég világosak...
Nézzük ezt: ^[[31;1mpiros^[[0m
^[ : esc (0x1b)
[ : control sorozat jön
31;1 : red;bright
m : lezárás
Azaz: ^[[31;1m : ami ezután jön, az piros
Hasonlóan: ^[[0m : reset

Bővebben:
http://www.termsys.demon.co.uk/vtansi.htm

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Valami már dereng, de azt nem értem, mi a fene az a ^[[0m : reset
Ugyanis egyszer már lezártuk a parancsstringet az "m" karakterrel, nem? Ezzel a parancssorral nem azt csináltuk-e, hogy az "aktuális írásszínt" beállítottuk pirosra? Tehát most már örökkön-örökké pirossal kéne írnia, amíg csak egy más színre utasító parancsstringet nem kap? Szóval, mi az a "reset" ott neki a kiirandó karakterlánc után?

-------------
:::A GoboLinux felhasználók hivatalos magyar fóruma: http://linux.birodalom.net/smf
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

^[[31;1m
De, lezártuk m-mel, innentől pirossal írsz.

Viszont normális ember nem ír mindent pirossal.
Sőt, ha valami más program is elkezd szemetelni a konzolra, akkor mostantól ő is pirossal fog szemetelni.

Éppen ezért, amint befejeztük a piros szöveget, rögtön takarítunk, azaz visszaállítjuk a színt a default értékre. Na ez az a bizonyos reset...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

> (OFF itt, de megjegyzem, egyetlen dolog van, amit utálok a C-ben, de azt vastagon ám: hogy a 0x karaktersorozattal vezeti be a hexa számokat. Megszoktam még a C-64 idejében, hogy a $ előtét a hexa számok jele. Ráadásul az egyetlen karakter, nem kettő, mint a 0x. Hogy én ezt mennyire utálom a C nyelvben!)

Költői kérdés: melyik volt régebben, a C programozási nyelv, vagy a C-64 gép?

Itt a HUP-on vagy a Linuxfórumon olvastam valakitől, hogy "mélykonzol" és megtetszett. Definíció szerint:

mélykonzol = Nem virtuális terminál. Tehát olyan konzol/terminál, ami nem grafikus felületen működik. A kettő közt érdemes különbséget tenni, mert vanbnak dolgok, amik nem oldhatóak meg virtuális terminálban, csak mélykonzolban.
-------------
:::A GoboLinux felhasználók hivatalos magyar fóruma: http://linux.birodalom.net/smf
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó

Akkor jelzem feléd, hogy ez inkább hangzik hülyén mint okosan.
Amúgy, ahogy ezt itt már más is írta, ez a terminál is virtuális. A valódi terminal egy hw elem, ami az esetek elsöprő többségében soros porton csatlakozik a számítógéphez. Jellemzően nem otthoni környezetben használatos.

Ave, Saabi.

Mivel a tema amugy is C/C++. Irtam egy kis libet, amivel lehet szinesen irkalni. Toltheto innen. Annyit kell tudni rola, hogy nem mindig valtok verzot, erdemes a ChangeLog-ot figyelgetni, es ujratolteni a csomagot.

Gentoo-bol lettek a fuggvenynevek atemelve. Jelenleg einfo, ewarn, eerror, ebegin, eend, ebeep es epause van, ezen felul esyslog. Az einfo/ewarn/eerror/ebegin/esyslog fuggvenyek printf-szeruek, a printf-ehez nagyon hasonlo szintaxissal rendelkeznek, megkonnyitve a munkat veluk.

A szinek fix kodokkal vannak csinalva, nem dinamikusan van elkerve. Linux terminal van alapul veve, nem tudom, pl. bsd-n lehet hogy nem teljesen jo.

A projekt tesztelve van, minden hibabejelentesnek orulok, a hrgyster kukac g mail pont com cimen varom ezeket.