bneil
bneil

Reputation: 1600

How do zsh ansi colour codes work?

I want to make my hostname in my terminal orange. How do I do that?

Upvotes: 35

Views: 57137

Answers (3)

Saad Farooq
Saad Farooq

Reputation: 13402

Running the following code in your terminal should tell you whether your terminal supports 256 colors.

for COLOR in {0..255} 
do
    for STYLE in "38;5"
    do 
        TAG="\033[${STYLE};${COLOR}m"
        STR="${STYLE};${COLOR}"
        echo -ne "${TAG}${STR}${NONE}  "
    done
    echo
done

it also shows you the code for each color in the form 38;5;x where x is the code for one of the 256 available colors. Also, note that changing the "38;5" to "48;5" will show you the background color equivalent. You can then use any colors you like to make up the prompt as previously mentioned.

Upvotes: 52

abcd
abcd

Reputation: 42235

First off, I'm not sure what terminal you're using or if it will even support the color orange. Mine supports the following: Red, Blue, Green, Cyan, Yellow, Magenta, Black & White. And here's how I get colors in my terminal:


You need to first load the colors using autoload. I use the following to load the colors and assign them to meaningful names

#load colors
autoload colors && colors
for COLOR in RED GREEN YELLOW BLUE MAGENTA CYAN BLACK WHITE; do
    eval $COLOR='%{$fg_no_bold[${(L)COLOR}]%}'  #wrap colours between %{ %} to avoid weird gaps in autocomplete
    eval BOLD_$COLOR='%{$fg_bold[${(L)COLOR}]%}'
done
eval RESET='%{$reset_color%}'

You can set the hostname in your prompt using the %m string. So to set, say a red hostname, you'd do

${RED}%m${WHITE}\>

which will print something like bneil.so>

Upvotes: 27

Hyperboreus
Hyperboreus

Reputation: 32449

Print

<ESC>[33mHostname<ESC>[0m

Being the escape character \x1b

Upvotes: 4

Related Questions