Wie bestimme ich, ob ein Terminal farbfähig ist?

Ich möchte ein Programm ändern, um automatisch zu erkennen, ob ein Terminal farbfähig ist oder nicht. Wenn ich das Programm in einem nicht farbfähigen Terminal ausführe (z. B. Mx-Shell in (X) Emacs), wird die Farbe automatisch deaktiviert .

Ich möchte das Programm nicht fest programmieren, um TERM = {emacs, dumb} zu erkennen.

Ich denke, dass termcap / terminfo in der Lage sein sollte, dabei zu helfen, aber bisher habe ich es nur geschafft, dieses (n) verfluchte Code-Snippet zusammenzufügen, das schlimm fehlschlägt, wenn es das Terminal nicht findet:

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

Das heißt Ich bekomme das:

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

das ist ... suboptimal.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage