Vorrei modificare un programma per rilevare automaticamente se un terminale è o meno compatibile con il colore, quindi quando eseguo detto programma da un terminale non compatibile con il colore (ad esempio shell Mx in (X) Emacs), il colore viene automaticamente spento.Come determinare se un terminale è compatibile con i colori?
Non voglio eseguire l'hardcode del programma per rilevare TERM = {emacs, dumb}.
Sto pensando che termcap/terminfo dovrebbe essere in grado di aiutare con questo, ma finora sono riuscito a mettere insieme solo questo (n) curses-usando snippet di codice, che fallisce male quando non riesce a trovare il terminale:
#include <stdlib.h>
#include <curses.h>
int main(void) {
int colors=0;
initscr();
start_color();
colors=has_colors() ? 1 : 0;
endwin();
printf(colors ? "YES\n" : "NO\n");
exit(0);
}
Ie Ho capito:
$ gcc -Wall -lncurses -o hep hep.c
$ echo $TERM
xterm
$ ./hep
YES
$ export TERM=dumb
$ ./hep
NO
$ export TERM=emacs
$ ./hep
Error opening terminal: emacs.
$
che è ... non ottimale.
Nell'analisi finale non è possibile, perché non è possibile stabilire con quale tipo di CRT viene implementato il terminale. –
Mi interessa sapere se il terminale (tipo) dice che è a colori o no - non in un'analisi dello spettro della luce che emana da un CRT :-) – asjo