WJG (17/05/14) I wanted a quick and easy way of marking up text strings for output to the console -- Tcl string map magic came in useful yet again.
#--------------- # Ansi colour markup. All settings are intense. # r,g,b,c,m,y,blk,wht = effects foreground settings # R,G,B,C,M,Y,BLK,WHT = background settings # n = reset to normal #--------------- # bold 1 light 2 blink 5 invert 7 # FG black 30 red 31 green 32 yellow 33 blue 34 purple 35 cyan 36 white 37 # BG Black 40 Red 41 Green 42 Yellow 43 Blue 44 Purple 45 Cyan 46 White 47 #--------------- proc g_ansi { str } { set clr_map " <r> \033\[01;31m <g> \033\[01;32m <b> \033\[01;34m <c> \033\[01;36m <m> \033\[01;35m <y> \033\[01;33m <R> \033\[01;41m <G> \033\[01;42m <B> \033\[01;44m <C> \033\[01;46m <M> \033\[01;45m <Y> \033\[01;43m <wht> \033\[01;37m <blk> \033\[01;30m <WHT> \033\[01;47m <BLK> \033\[01;40m <n> \033\[;0m /< < /> > " return [string map $clr_map ${str}<n>] } puts [g_ansi "<r> red <g> green <b> blue <c> cyan <m> magenta <y> yellow"] puts [g_ansi "<R> red <G> green <B> blue <C> cyan <M> magenta <Y> yellow" ] puts [g_ansi "<WHT>HELLO<n> underline <R>/<WHT/>"]
AMG: You could also use procs:
foreach {name value} {r 1 g 2 b 4 c 6 m 5 y 3 wht 7 blk 0} { proc $name {} "return \033\\\[01\\;3${value}m" proc [string toupper $name] {} "return \033\\\[01\\;4${value}m" } proc n {} {return \033\[\;0m} puts "[r] red [g] green [b] blue [c] cyan [m] magenta [y] yellow" puts "[R] red [G] green [B] blue [C] cyan [M] magenta [Y] yellow" puts "[WHT]HELLO[n] underline [R]\[WHT\]"