1 2 o Colour does not work with all backends and all terminals. I tested 3 many terminal emulators and tried to summarise which combinations 4 worked properly and which ones did not. 5 6 From termcap(5): 7 8 set_a_background setab AB Set background 9 color to #1, using 10 ANSI escape 11 set_a_foreground setaf AF Set foreground 12 color to #1, using 13 ANSI escape 14 From the xterm terminfo: 15 16 setab=\E[4%p1%dm, setaf=\E[3%p1%dm 17 18 From the xterm-16color terminfo: 19 (http://www.sct.gu.edu.au/~anthony/info/X/Xterm_xf86.terminfo) 20 21 setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm, 22 setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm, 23 24 These values can be simply retrieved with a tigetstr() call. 25 26 o I tested the following terminals: 27 28 name $TERM $COLORTERM 29 ------------------------------------------ 30 Linux console linux 31 pterm xterm 32 aterm xterm rxvt-xpm 33 wterm xterm wterm-xpm 34 Eterm xterm Eterm 35 xterm xterm 36 gnome-terminal xterm 37 konsole xterm 38 mlterm mlterm 39 uxterm xterm 40 41 o In most terminals, \e[3xm and \[4xm respectively set the foreground 42 and background colours. x is a colour between 0 and 7 or the value 43 9 for default colour (may be transparent). 44 45 \e[0m sets everything to normal, \e[1m sets bold, \e[5m sets blink 46 and \e[7m sets inverse video. 47 48 In ncurses, only 64 colour pairs are created, and A_BOLD (\e[1m) and 49 A_BLINK (\e[5m) are used for foreground/background colour highlighting, 50 hence creating 256 possible colour pairs. 51 52 Different tests of blue on yellow: 53 54 for invert in '' '\e[7m'; do 55 for blink in '' '\e[5m'; do 56 for bold in '' '\e[1m'; do 57 echo -ne "$bold$blink$invert"'\e[33m\e[44m'hop'\e[0m ' 58 echo "($bold$blink$invert)" 59 done 60 done 61 done 62 63 Successfully works on: 64 + Linux console 65 + pterm 66 + Eterm 67 + aterm, wterm, rxvt 68 69 Almost works on: 70 + xterm (bright bg only works when fg is bright and then inverted, 71 but then fg is not bright) 72 73 Fails on: 74 + mlterm (no bright colours, neither fg nor bg) 75 + gnome-terminal (no bright bg) 76 + konsole (no bright bg, $blink really blinks) 77 78 o In an XTerm-compatible terminal, \e[9xm sets bright foreground 79 and \e[10xm bright background colours. Documentation on this can be 80 found at http://ftp.xfree86.org/pub/XFree86/4.2.1/doc/ctlseqs.TXT . 81 Unfortunately all terminals don't support these escape sequences. Here 82 is a testcase: 83 84 for fgpre in 3 9; do for fg in 0 4 2 6 1 5 3 7; do 85 for bgpre in 4 10; do 86 echo -ne '\e['$fgpre$fg'm' 87 for bg in 0 4 2 6 1 5 3 7; do echo -ne '\e['$bgpre$bg'm# '; done 88 echo -ne '\e[0m ' 89 done 90 echo '' 91 done; echo ''; done 92 93 Successfully tested on: 94 + gnome-terminal 95 + konsole 96 + xterm 97 + pterm 98 99 Failed (\e[9x and \e[10x don't do anything) on: 100 + Eterm 101 + aterm, wterm, rxvt 102 + mlterm 103 + Linux console 104 105 o How to draw bright colours on any terminal? 106 107 '\e[93;104m' -> bright yellow on bright blue 108 doesn't work on mlterm, gnome-terminal, konsole 109 110 '\e[5;1;33;44m' -> bright yellow on bright blue 111 doesn't work on mlterm, aterm/wterm/rxvt, Eterm, console 112 113 '\e[5;1;33;44;93;104m' -> bright yellow on bright blue 114 works on gnome-terminal, xterm, pterm, aterm/wterm/rxvt, console 115 doesn't work on konsole 116 117 o MS-DOS: all bright colours, bright backgrounds, and bright combinations 118 work using <conio.h>. No need to kludge anything. 119 120 o Win32: we use GetConsoleScreenBufferInfo etc. There is an interesting 121 tutorial here: http://www.adrianxw.dk/SoftwareSite/index.html 122 123 o Set terminal window title: 124 http://mail.gnome.org/archives/mc-devel/2003-January/msg00101.html 125 126