This page has been designed specifically for the printed screen. It may look different than the page you were viewing on the web.
Please recycle it when you're done reading.

The URI for this page is { http://cc.byexamples.com }

print color string without ncurses Posted on January 20th

Printing color strings uses only printf, without any alternative libraries such as ncurses? Yes, we can do that in any unix based operating system that support ANSI codes, I am not sure whether it works on either windows or mac, have no chance to try at the moment.

By feeding some magic characters to printf, you can manipulate your fore color, background color and even attributes. Lets look at a simple example to print “Hello World” in Bright Red with background black.


#define BRIGHT 1
#define RED 31
#define BG_BLACK 40
printf("%c[%d;%d;%dmHello World", 0x1B, BRIGHT,RED,BG_BLACK);

Okay, the code above print the string with bright red but the color setting will remain, to reset back the color to default, refers the code as bellow:


printf("%c[%dm", 0x1B, 0);

The fore color, background color and attributes codes are shown as bellow


Text attributes
       0    All attributes off
       1    Bold on
       4    Underscore (on monochrome display adapter only)
       5    Blink on
       7    Reverse video on
       8    Concealed on

    Foreground colors
       30    Black
       31    Red
       32    Green
       33    Yellow
       34    Blue
       35    Magenta
       36    Cyan
       37    White

    Background colors
       40    Black
       41    Red
       42    Green
       43    Yellow
       44    Blue
       45    Magenta
       46    Cyan
       47    White

How’s the color magic works? 0×1B is a special code that used to do all the color settings. 0×1B is hex code equivalent to decimal 27. With character(27) and a open square blacket “[”, initiate the setting. The rest of the values are (attribute);(fore color);(background color) and it ends the setting with ” m “. So entire thing will be look like this:

printf("%c[%d;%d;%dm",27,1,33,40);

With that the rest of your print line will be in bright yellow with background color black.

I have transparent background, What if I want my default background instead of any color?
Simple, ignore the background color, How?

printf("%c[%d;%dmHello World%c[%dm\n",27,1,33,27,0);

The line above will print bright yellow “Hello World” with default bg color.

Reference:
Print Color Text in Command Line
ANSI CODES

Trackback URL

Some Responses to “print color string without ncurses” :

  1. [...] print color string without ncurses [...]

    Commented c/c++ programming by examples on January 21st, 2007.
  2. [...] print color string without ncurses [...]

    Commented writting a fun cli apps with ncurses on March 30th, 2007.
  3. ……….excellent

    Commented sohan on July 12th, 2007.
  4. Tyvm :) Works great in PHP (cli) as well for those without the ncurses lib compiled in, or the PECL library.

    Commented John Hoffmann on August 16th, 2007.
Leave your own comments about this post: