Me gustaría cambiar un programa para detectar automáticamente si un terminal tiene o no capacidad de color, por lo que cuando ejecuto dicho programa desde un terminal que no es de color (digamos Mx shell en (X) Emacs), el color es automáticamente apagado.¿Cómo puedo determinar si un terminal es compatible con el color?
No quiero codificar el programa para detectar TERM = {emacs, dumb}.
Estoy pensando que termcap/terminfo debería ser capaz de ayudarme con esto, pero hasta ahora solo he logrado improvisar este (n) fragmento de código de uso de maldiciones, que falla mal cuando no puede encontrar la terminal:
#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 Obtengo esto:
$ 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.
$
que es ... subóptimo.
En el análisis final no se puede, porque no se puede decir con qué tipo de CRT se implementa el terminal. –
Me interesa saber si el terminal (tipo) dice que es compatible con el color o no, no en un análisis del espectro de la luz que emana de un CRT :-) – asjo