Skip to content

Instantly share code, notes, and snippets.

@depressed-pho
Created April 18, 2012 05:23
Show Gist options
  • Save depressed-pho/2411259 to your computer and use it in GitHub Desktop.
Save depressed-pho/2411259 to your computer and use it in GitHub Desktop.
Manipulating ANSI colour sequences in Bash
#!/usr/bin/env bash
#
# Example:
#
# . colours.sh
#
# setColour bold underline green:black
# echo "Hello, world!"
# setColour reset
#
function setColour_ () {
local base=30
case "$1" in
"-f")
shift;;
"-b")
base=40
shift
esac
local index
case "$1" in
"black")
index=0;;
"red")
index=1;;
"green")
index=2;;
"yellow")
index=3;;
"blue")
index=4;;
"magenta")
index=5;;
"cyan")
index=6;;
"white")
index=7;;
"default")
index=9;;
*)
echo "setColour: unknown colour: $1" >&2
return 1
esac
local -r code=$(( $base + $index ))
echo -ne "\e[${code}m"
}
function setColour () {
local i
for i in $@; do
case "$i" in
"reset")
echo -ne "\e[0m";;
"bold")
echo -ne "\e[1m";;
"narrow")
echo -ne "\e[2m";;
"italic")
echo -ne "\e[3m";;
"underline")
echo -ne "\e[4m";;
"blink")
echo -ne "\e[5m";;
"inverse")
echo -ne "\e[7m";;
"conceal")
echo -ne "\e[8m";;
"strike")
echo -ne "\e[9m";;
"/bold")
echo -ne "\e[22m";;
"/italic")
echo -ne "\e[23m";;
"/underline")
echo -ne "\e[24m";;
"/blink")
echo -ne "\e[25m";;
"/inverse")
echo -ne "\e[27m";;
"/conceal")
echo -ne "\e[28m";;
"/strike")
echo -ne "\e[29m";;
*)
if echo "$i" | grep -Fq ":"; then
setColour_ -f $(echo "$i" | cut -d: -f1)
setColour_ -b $(echo "$i" | cut -d: -f2)
else
setColour_ "$i"
fi
esac
done
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment