How do zsh ansi colour codes work?
Asked Answered
B

3

35

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

Boldt answered 28/5, 2011 at 5:30 Comment(0)
H
26

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>

Hadik answered 28/5, 2011 at 5:38 Comment(4)
This is a great snippet @yoda. Do you know if there is a way to 1) Know what colors are loaded in autoload colors && colors? 2) Know what colors are supported by your terminal?Incendiarism
These are the colors that are loaded by autoload. That little loop merely renames them to more intuitive color names (e.g., RED instead of fg_no_bold_RED or something like that). If you're running Mac OS X 10.6 and below, the default Terminal.app will support only 16 colors. You can download iterm2 for Mac which is a great terminal and supports 256 colors. With OS X 10.7, I think Terminal.app supports 256 colors (although I can't verify as I haven't upgraded). You can also use this handy script to see how many colors it supports.Hadik
@yoda, I added the percent wrapping to the RESET as well. It has the same "weird gap" issue for me otherwise.Tinge
When I try to use this first snippet I get the error: command not found: autocompleteDowney
S
51

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.

Seacoast answered 27/5, 2013 at 10:54 Comment(1)
What is the value of ${NONE}?Dairying
H
26

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>

Hadik answered 28/5, 2011 at 5:38 Comment(4)
This is a great snippet @yoda. Do you know if there is a way to 1) Know what colors are loaded in autoload colors && colors? 2) Know what colors are supported by your terminal?Incendiarism
These are the colors that are loaded by autoload. That little loop merely renames them to more intuitive color names (e.g., RED instead of fg_no_bold_RED or something like that). If you're running Mac OS X 10.6 and below, the default Terminal.app will support only 16 colors. You can download iterm2 for Mac which is a great terminal and supports 256 colors. With OS X 10.7, I think Terminal.app supports 256 colors (although I can't verify as I haven't upgraded). You can also use this handy script to see how many colors it supports.Hadik
@yoda, I added the percent wrapping to the RESET as well. It has the same "weird gap" issue for me otherwise.Tinge
When I try to use this first snippet I get the error: command not found: autocompleteDowney
B
4

Print

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

Being the escape character \x1b

Bolme answered 28/5, 2011 at 5:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.