Skip to content

How to set terminal background color on linux terminal without using ncurses?

An answer to this question on Stack Overflow.

Question

I've wrote a simple console program in C which uses ANSI escape codes to color its text.

Is there a way to temporarily set the background of the whole terminal to black and the default font color to light gray? Can this be reverted after the program ends?

I'd prefer to avoid using ncurses.

Answer

Probably the simplest way to go is to set the background colour of your text with ANSI:

For instance using:

echo -e "\e[37m\e[41m"

will give you blue text on a red background (you can use this to test the effect in dramatic, easy to see colours).

Whereas

echo -e "\e[97m\e[40m"

will set the foreground to white and the background to black for the duration of your program.

If you find that you're getting a kind of ugly transition zone between your background colour and the terminal's just print a sufficient number of newlines to wipe the whole screen.

To use this in C, you'll obviously want printf instead of echo.

The wiki page on ANSI escape codes has additional information.