How can I write colorful message on Linux Console? , mostly this kind of question is asked by newcomers (Specially those who are learning shell programming!). As you know in Linux everything is considered as a file, our console is one of such special file. You can write special character sequences to console, which control every aspects of the console like Colors on screen, Bold or Blinking text effects, clearing the screen, showing text boxes etc. For this purpose we have to use special code called escape sequence code . Our Linux console is based on the DEC VT100 serial terminals which support ANSI escape sequence code.
What is special character sequence and how to write it to Console?
By default what ever you send to console it is printed as its. For e.g. consider following echo statement,
$ echo "Hello World"
Hello World
Above echo statement prints sequence of character on screen, but if there is any special escape sequence (control character) in sequence , then first some action is taken according to escape sequence (or control character) and then normal character is printed on console. For e.g. following echo command prints message in Blue color on console
$ echo -e "/033[34m Hello Colorful World!"
Hello Colorful World!
Above echo statement uses ANSI escape sequence (/033[34m ), above entire string ( i.e. "/033[34m Hello Colorful World!" ) is process as follows
1) First /033 , is escape character, which causes to take some action
2) Here it set screen foreground color to Blue using [34m escape code.
3) Then it prints our normal message Hello Colorful World! in blue color.
Note that ANSI escape sequence begins with /033 (Octal value) which is represented as ^[ in termcap and terminfo files of terminals and documentation.
You can use echo statement to print message, to use ANSI escape sequence you must use -e option (switch) with echo statement, general syntax is as follows
Syntax
echo -e "/033[ escape-code your-message "
In above syntax you have to use/033[ as its with different escape-code for different operations. As soon as console receives the message it start to process/read it, and if it found escape character (/033 ) it moves to escape mode, then it read "[ " character and moves into Command Sequence Introduction (CSI) mode. In CSI mode console reads a series of ASCII-coded decimal numbers (know as parameter) which are separated by semicolon (; ) . This numbers are read until console action letter or character is not found (which determines what action to take). In above example
/033 | Escape character |
[ | Start of CSI |
34 | 34 is parameter |
m | m is letter (specifies action) |
Following table show important list of such escape-code/action letter or character
Character or letter | Use in CSI | Examples |
h | Set the ANSI mode | echo -e "/033[h" |
l | Clears the ANSI mode | echo -e "/033[l" |
m | Useful to show characters in different colors or effects such as BOLD and Blink, see below for parameter taken by m. | echo -e "/033[35m Hello World" |
q | Turns keyboard num lock, caps lock, scroll lock LED on or off, see below. | echo -e "/033[2q" |
s | Stores the current cursor x,y position (col , row position) and attributes | echo -e "/033[7s" |
u | Restores cursor position and attributes | echo -e "/033[8u" |
m understand following parameters
Parameter | Meaning | Example |
0 | Sets default color scheme (White foreground and Black background), normal intensity, no blinking etc. | |
1 | Set BOLD intensity | $ echo -e "I am /033[1m BOLD /033[0m Person" I am BOLD Person Prints BOLD word in bold intensity and next ANSI Sequence remove bold effect (/033[0m ) |
2 | Set dim intensity | $ echo -e "/033[1m BOLD /033[2m DIM /033[0m" |
5 | Blink Effect | $ echo -e "/033[5m Flash! /033[0m" |
7 | Reverse video effect i.e. Black foreground and white background in default color scheme | $ echo -e "/033[7m Linux OS! Best OS!! /033[0m" |
11 | Shows special control character as graphics character. For e.g. Before issuing this command press alt key (hold down it) from numeric key pad press 178 and leave both key; nothing will be printed. Now give --> command shown in example and try the above, it works. (Hey you must know extended ASCII Character for this!!!) | $ press alt + 178 $ echo -e "/033[11m" $ press alt + 178 $ echo -e "/033[0m" $ press alt + 178 |
25 | Removes/disables blink effect | |
27 | Removes/disables reverse effect | |
30 - 37 | Set foreground color 31 - RED 32 - Green xx - Try to find yourself this left as exercise for you :-) | $ echo -e "/033[31m I am in Red" |
40 - 47 | Set background color xx - Try to find yourself this left as exercise for you :-) | $ echo -e "/033[44m Wow!!!" |
q understand following parameters
Parameters | Meaning |
0 | Turns off all LEDs on Keyboard |
1 | Scroll lock LED on and others off |
2 | Num lock LED on and others off |
3 | Caps lock LED on and others off |
Click here to see example of q command.
Click here to see example of m command.
Click here to see example of s and u command.
This is just quick introduction about Linux Console and what you can do using this Escape sequence. Above table does not contains entire CSI sequences. My up-coming tutorial series on C Programming Language will defiantly have entire story with S-Lang and curses (?). What ever knowledge you gain here will defiantly first step towards the serious programming using c. This much knowledge is sufficient for Shell Programming, now try the following exercise :-) I am Hungry give me More Programming Exercise & challenges! :-)
1) Write function box(), that will draw box on screen (In shell Script)
box (left, top, height, width)
For e.g. box (20,5,7,40)
Hint : Use ANSI Escape sequence
1) Use of 11 parameter to m
2) Use following for cursor movement
row;col H
or
rowl;col f
For e.g.
$ echo -e "/033[5;10H Hello"
$ echo -e "/033[6;10f Hi"
In Above example prints Hello message at row 5 and column 6 and Hi at 6th row and 10th Column.
link:http://www.freeos.com/guides/lsst/misc.htm#colorfunandmore