6.5. Colours and Cursor Movement With tput
As with so many things in Unix, there is more than one way to achieve the same ends. A utility called tput can also be used to move the cursor around the screen, get back information about the status of the terminal, or set colours. man tput doesn't go into much detail about the available commands, but Emilio Lopes e-mailed me to point out that man terminfo will give you a huge list of capabilities, many of which are device independent, and therefore better than the escape sequences previously mentioned. He suggested that I rewrite all the examples using tput for this reason. He is correct that I should, but I've had some trouble controlling it and getting it to do everything I want it to. However, I did rewrite one prompt which you can see as an example: Section 12.8.
Here is a list of tput capabilities that I have found useful:
tput Colour Capabilities
- tput setab [1-7]
Set a background colour using ANSI escape
- tput setb [1-7]
Set a background colour
- tput setaf [1-7]
Set a foreground colour using ANSI escape
- tput setf [1-7]
Set a foreground colour
tput Text Mode Capabilities
- tput bold
Set bold mode
- tput dim
turn on half-bright mode
- tput smul
begin underline mode
- tput rmul
exit underline mode
- tput rev
Turn on reverse mode
- tput smso
Enter standout mode (bold on rxvt)
- tput rmso
Exit standout mode
- tput sgr0
Turn off all attributes (doesn't work quite as expected)
tput Cursor Movement Capabilities
- tput cup Y X
Move cursor to screen location X,Y (top left is 0,0)
- tput sc
Save the cursor position
- tput rc
Restore the cursor position
- tput lines
Output the number of lines of the terminal
- tput cols
Output the number of columns of the terminal
- tput cub N
Move N characters left
- tput cuf N
Move N characters right
- tput cub1
move left one space
- tput cuf1
non-destructive space (move right one space)
- tput ll
last line, first column (if no cup)
- tput cuu1
up one line
tput Clear and Insert Capabilities
- tput ech N
Erase N characters
- tput clear
clear screen and home cursor
- tput el1
Clear to beginning of line
- tput el
clear to end of line
- tput ed
clear to end of screen
- tput ich N
insert N characters (moves rest of line forward!)
- tput il N
insert N lines
This is by no means a complete list of what terminfo and tput allow, in fact it's only the beginning. man tput and man terminfo if you want to know more.