Как определить, поддерживает ли терминал цвет?

Я хотел бы изменить программу, чтобы автоматически определять, поддерживает ли терминал цвет, или нет, поэтому, когда я запускаю указанную программу из терминала, не поддерживающего цвета (например, Mx shell в (X) Emacs), цвет автоматически отключается ,

Я не хочу жестко кодировать программу, чтобы обнаружить TERM = {emacs, тупой}.

Я думаю, что termcap / terminfo должен быть в состоянии помочь с этим, но до сих пор мне удалось собрать только этот (n) фрагмент кода с использованием curses, который плохо работает, когда он не может найти терминал:

#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);
}

То есть Я получаю это:

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

что ... неоптимально.

Ответы на вопрос(3)

Ваш ответ на вопрос