Pagina 1 di 1

[C linux] come posso stampare caratteri colorati?

MessaggioInviato: mar mag 09, 2006 3:37 pm
da Shagrath
Ciao a tutti,
avrei bisogno di qualcosa per stampare l'output su riga di comando, con il C su linux, con colori diversi da quello di default.
Conosco molto basilarmente le librerie ncurses, potrebbero andar bene se non fosse che la dimensione della finestra è finita, non pseudo-infinita come in una normale shell, nella quale posso vedere l'output fuori schermo scorrendo la barra verticale...
Potete dirmi se c'è un alternativa alle ncurses o se il problema delle dimensioni dello schermo può essere sistemato?

Grazie!

MessaggioInviato: mer mag 10, 2006 11:07 am
da Shagrath
Ok, ce l'ho fatta, ho trovato una soluzione. Posto i risultati, magari possono servire a qualcun'altro.

Ho abbandonato la ncurses poichè non ho trovato un sistema per dare allo schermo (che viene considerato come una finestra dalle ncurses) una dimesione progressiva in altezza.
Ho invece trovato una soluzione più comoda e facile da usare che può essere integrata nella printf().
Basta inserire uno di questi caratteri speciali nella stringa da stampare sullo STD_OUT:

    rgb_restore='\[\033[00m\]' // rimette il colore di default
    rgb_black='\[\033[00;30m\]'
    rgb_firebrick='\[\033[00;31m\]'
    rgb_red='\[\033[01;31m\]'
    rgb_yellow='\[\033[01;33m\]'
    rgb_forest='\[\033[00;32m\]'
    rgb_green='\[\033[01;32m\]'
    rgb_brown='\[\033[00;33m\]'
    rgb_navy='\[\033[00;34m\]'
    rgb_blue='\[\033[01;34m\]'
    rgb_purple='\[\033[00;35m\]'
    rgb_magenta='\[\033[01;35m\]'
    rgb_cadet='\[\033[00;36m\]'
    rgb_cyan='\[\033[01;36m\]'
    rgb_gray='\[\033[00;37m\]'
    rgb_white='\[\033[01;37m\]'


ecco come vanno inseriti nella printf:
Codice: Seleziona tutto
printf( "\033[01;33mCiao\n" );

Insomma, dovete omettere i due gruppi di carratteri '\[ e \]'
Attenzione però, una volta che uno di questi carratteri viene stampato a schermo, viene cambiato il colore che la shell usa per stampare a video! Quindi, anche se il vostro programma avrà terminato di eseguire, la shell continuerà, come nel nostro caso, a stampare giallo...
Per evitare che ciò avvenga, ricordatevi di stampare il carattere rgb_restore prima della fine del vs programma:
Codice: Seleziona tutto
printf( "\033[01;33mCiao\033[00m\n" );

Così sarà stampato solo un "Ciao" giallo e subito dopo sarà reimpostato il colore di default della shell.