How to set terminal background color on linux term

2020-03-24 07:54发布

问题:

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.

回答1:

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.



回答2:

How to do this depends on the terminal the user is using. It may be ANSI, it may be VT100, it might be a line printer. ncurses abstracts this horror for you. It uses a database of information about how to talk to different kinds of terminal (see the contents of $TERM to see which one you are currently using) normally stored in /lib/terminfo or /usr/share/terminfo.

Once you look in those files, you'll probably want to reconsider not using ncurses, unless you have specific requirements to avoid it (embedded system with not enough storage, etc.)