Como determino se um terminal é compatível com cores?

Gostaria de alterar um programa para detectar automaticamente se um terminal tem capacidade para cores ou não; portanto, quando executo o programa a partir de um terminal que não possui cores (por exemplo, Mx shell no (X) Emacs), a cor é automaticamente desativada .

Eu não quero codificar o programa para detectar TERM = {emacs, dumb}.

Eu estou pensando que termcap / terminfo deve ser capaz de ajudar com isso, mas até agora eu só consegui juntar este (n) trecho de código usando maldições, que falha muito quando não consegue encontrar o 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);
}

I.e. Eu entendi isso:

$ 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.
$ 

o que é ... abaixo do ideal.

questionAnswers(3)

yourAnswerToTheQuestion