ANSI Color
ANSI Color
256 color mode of xterm ANSI
a small bash script which prints a table of escape sequences: colortable16.sh:
#!/bin/bash # prints a color table of 8bg * 8fg * 2 states (regular/bold) echo echo Table for 16-color terminal escape sequences. echo Replace ESC with \\033 in bash. echo echo "Background | Foreground colors" echo "---------------------------------------------------------------------" for((bg=40;bg<=47;bg++)); do for((bold=0;bold<=1;bold++)) do echo -en "\033[0m"" ESC[${bg}m | " for((fg=30;fg<=37;fg++)); do if [ $bold == "0" ]; then echo -en "\033[${bg}m\033[${fg}m [${fg}m " else echo -en "\033[${bg}m\033[1;${fg}m [1;${fg}m" fi done echo -e "\033[0m" done echo "--------------------------------------------------------------------- " done echo echo
256colors2.pl:
#!/usr/bin/perl # Author: Todd Larason <jtl@molehill.org> # $XFree86: xc/programs/xterm/vttests/256colors2.pl,v 1.2 2002/03/26 01:46:43 dickey Exp $ # use the resources for colors 0-15 - usually more-or-less a # reproduction of the standard ANSI colors, but possibly more # pleasing shades # colors 16-231 are a 6x6x6 color cube for ($red = 0; $red < 6; $red++) { for ($green = 0; $green < 6; $green++) { for ($blue = 0; $blue < 6; $blue++) { printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\", 16 + ($red * 36) + ($green * 6) + $blue, ($red ? ($red * 40 + 55) : 0), ($green ? ($green * 40 + 55) : 0), ($blue ? ($blue * 40 + 55) : 0)); } } } # colors 232-255 are a grayscale ramp, intentionally leaving out # black and white for ($gray = 0; $gray < 24; $gray++) { $level = ($gray * 10) + 8; printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\", 232 + $gray, $level, $level, $level); } # display the colors # first the system ones: print "System colors:\n"; for ($color = 0; $color < 8; $color++) { print "\x1b[48;5;${color}m "; } print "\x1b[0m\n"; for ($color = 8; $color < 16; $color++) { print "\x1b[48;5;${color}m "; } print "\x1b[0m\n\n"; # now the color cube print "Color cube, 6x6x6:\n"; for ($green = 0; $green < 6; $green++) { for ($red = 0; $red < 6; $red++) { for ($blue = 0; $blue < 6; $blue++) { $color = 16 + ($red * 36) + ($green * 6) + $blue; print "\x1b[48;5;${color}m "; } print "\x1b[0m "; } print "\n"; } # now the grayscale ramp print "Grayscale ramp:\n"; for ($color = 232; $color < 256; $color++) { print "\x1b[48;5;${color}m "; } print "\x1b[0m\n";
Referenced from: The 90s called; they want their 256 colors back
References:
- ANSI escape code - http://en.wikipedia.org/wiki/ANSI_escape_code
Colored Bash
echo -e "\033[31mHI"
echo "^[[0;31;40mIn Color" <ESC>[{attr};{fg};{bg}m
Color test:
#/bin/sh # Show all the colors of the rainbow, should be run under bash for STYLE in 0 1 2 3 4 5 6 7; do for FG in 30 31 32 33 34 35 36 37; do for BG in 40 41 42 43 44 45 46 47; do CTRL="\033[${STYLE};${FG};${BG}m" echo -en "${CTRL}" echo -n "${STYLE};${FG};${BG}" echo -en "\033[0m" done echo done echo done # Reset echo -e "\033[0m"
The "m" character following the number code 31 (Indicating that you want to print in red) completes the instantiation of the color. Without it, your text would remain whatever color it already was. The incorrect echo statement may also have other bizarre side effects, like repositioning your cursor or resetting your terminal. The final "m" is very important :)
References:
- The Linux and Unix Menagerie: Using Color In The Linux Or Unix Shell
- The Linux and Unix Menagerie: Script For A Simple Menu Using Tput And ANSI Color
- Output color on bash scripts « Helpful Linux Tidbits
- So You Like Color--The Mysterious ^[[ Characters
- Colorizing Scripts
- The Bash Shell - Edoceo, Inc.
Python ANSI Color
- ANSI escape code - http://en.wikipedia.org/wiki/ANSI_escape_code
---
unicode - Print in terminal with colors using Python? - Stack Overflow - https://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python
class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' print bcolors.WARNING + "Warning: No active frommets remain. Continue?" + bcolors.ENDC
class colors: black = 0 red = 1 green = 2 yellow = 3 blue = 4 magenta = 5 cyan = 6 white = 7 fg = 30 # foreground add bg = 40 # background add bfg = 90 # bold foreground add bbg = 100 # bold background add print '\033[%dm red foreground \033[0m' % (colors.red + colors.fg) print '\033[%dm bold red foreground \033[0m' % (colors.red + colors.bfg) print '\033[%dm blue background \033[0m' % (colors.blue + colors.bg) print '\033[%dm bold blue background \033[0m' % (colors.blue + colors.bbg)
---
Before you start spouting escape sequences, you should check that stdout is a tty. You can do this with sys.stdout.isatty()
sys.stdout.isatty()
def hilite(string, status, bold): attr = [] if status: # green attr.append('32') else: # red attr.append('31') if bold: attr.append('1') return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), string)
Python | change text color in shell - Stack Overflow - https://stackoverflow.com/questions/2330245/python-change-text-color-in-shell
---
For reference, a small bash script which prints a table of escape sequences: colortable16.sh: (The 256 color mode of xterm, The 90s called; they want their 256 colors back)
#!/bin/bash # prints a color table of 8bg * 8fg * 2 states (regular/bold) echo echo Table for 16-color terminal escape sequences. echo Replace ESC with \\033 in bash. echo echo "Background | Foreground colors" echo "---------------------------------------------------------------------" for((bg=40;bg<=47;bg++)); do for((bold=0;bold<=1;bold++)) do echo -en "\033[0m"" ESC[${bg}m | " for((fg=30;fg<=37;fg++)); do if [ $bold == "0" ]; then echo -en "\033[${bg}m\033[${fg}m [${fg}m " else echo -en "\033[${bg}m\033[1;${fg}m [1;${fg}m" fi done echo -e "\033[0m" done echo "--------------------------------------------------------------------- " done echo echo
Python version: (modified by me)
#!/usr/bin/env python import sys # prints a color table of 8bg * 8fg * 2 states (regular/bold) print print "Table for 16-color terminal escape sequences." print "Replace ESC with \\033 in bash." print print "Background | Foreground colors" print "---------------------------------------------------------------------" for bg in range(40, 47+1): for bold in range(0, 1+1): sys.stdout.write("\033[0m"" ESC[{bg}m | ".format(bg=bg)) for fg in range(30, 37+1): if bold == 0: sys.stdout.write("\033[{bg}m\033[{fg}m [{fg}m ".format(bg=bg, fg=fg)) else: sys.stdout.write("\033[{bg}m\033[1;{fg}m [1;{fg}m".format(bg=bg, fg=fg)) sys.stdout.write("\033[0m\n") print "--------------------------------------------------------------------- " print print
keywords
ANSI Color