How do I determine if a terminal is color-capable?

Posted by asjo on Stack Overflow See other posts from Stack Overflow or by asjo
Published on 2010-03-17T19:59:01Z Indexed on 2010/03/17 20:01 UTC
Read the original article Hit count: 354

Filed under:
|
|
|

I would like to change a program to automatically detect whether a terminal is color-capable or not, so when I run said program from within a non-color capable terminal (say M-x shell in (X)Emacs), color is automatically turned off.

I don't want to hardcode the program to detect TERM={emacs,dumb}.

I am thinking that termcap/terminfo should be able to help with this, but so far I've only managed to cobble together this (n)curses-using snippet of code, which fails badly when it can't find the 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. I get this:

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

which is... suboptimal.

© Stack Overflow or respective owner

Related posts about unix

Related posts about termcap