Wiki/Cheatsheets/color.md
2025-04-10 04:10:54 +02:00

4.9 KiB

title, description, published, date, tags, editor, dateCreated
title description published date tags editor dateCreated
color true 2023-04-28T02:38:18.678Z markdown 2023-04-28T02:22:37.379Z

Style and Colors in the terminal

who doesn't love Style and Colors?


Style is a mixed bag in terms of support

Some things are rarely supported, but it won't hurt.

Number Style Code Disable Support
0 Reset "\e[0m" All
1 Bold "\e[1m" "\e[22m" All
2 thin "\e[2m" "\e[22m" Most
3 Cursive "\e[3m" "\e[23m" Most
4 Underline "\e[4m" "\e[24m" Most
5 Blinking Slow "\e[5m" "\e[25m" Most
6 Blinking Fast "\e[6m" "\e[25m" Some
7 Inverted Color "\e[7m" "\e[27m" All
8 Conceal "\e[8m" "\e[28m" Some
9 Striketrough "\e[9m" "\e[29m" Most
11-20 Other Fonts "\e[11-20m" "\e[10m" Most
21 Double Underline "\e[21m" "\e[24m" Some
26 No Monospace "\e[26m" "\e[50m" Some
51 Framed "\e[51m" "\e[54m" Some
52 Circled "\e[52m" "\e[54m" Some
53 Overline "\e[53m" "\e[55m" Some

The 8 colors supported by all modern terminal emulators

3 bit color, a bit strange but every bit was valueable back then

Number Color Foreground Background
0 Black "\e[30m" "\e[40m"
1 Red "\e[31m" "\e[41m"
2 Green "\e[32m" "\e[42m"
3 Yellow "\e[33m" "\e[43m"
4 Blue "\e[34m" "\e[44m"
5 Magenta "\e[35m" "\e[45m"
6 Cyan "\e[36m" "\e[46m"
7 White "\e[37m" "\e[47m"
9 Reset "\e[39m" "\e[49m"

Combinations are supported by all modern terminal emulators

In general try to do style first, then color

Code Description
"\e[0;0m" Reset All
"\e[1;3m" Bold and Cursive
"\e[30;44m" Black letters on Blue background
"\e[1;30;47m" Bold Black letters on White background
"\e[45;32m" Green letters on Magenta Background
"\e[1;3;4;5m" Bold Cursive Underlined and Blinking slow
"\e[2;9;31;46m" Thin Striketrough Style with Red letters on Cyan background

Bright Colors are supported by most modern terminal emulators

4 bit color, With a added brighter variant of the 8 default colors

Number Color Foreground Background
0 Black "\e[90m" "\e[100m"
1 Red "\e[91m" "\e[101m"
2 Green "\e[92m" "\e[102m"
3 Yellow "\e[93m" "\e[103m"
4 Blue "\e[94m" "\e[104m"
5 Magenta "\e[95m" "\e[105m"
6 Cyan "\e[96m" "\e[106m"
7 White "\e[97m" "\e[107m"
9 Reset "\e[39m" "\e[49m"

256 Colors are supported by most modern terminal emulators

8 bit color this is the most common among terminal emulators
0 to 15 are the 8 standard and 8 bright colors
16 to 231 are the extra colors
232 to 255 are some extra grayscale options

Number Foreground Background Underline
0 "\e[38;5;0m" "\e[48;5;0m" "\e[58;5;0m"
1 "\e[38;5;1m" "\e[48;5;1m" "\e[58;5;1m"
2 "\e[38;5;2m" "\e[48;5;2m" "\e[58;5;2m"
3 "\e[38;5;3m" "\e[48;5;3m" "\e[58;5;3m"
... "\e[38;5;...m" "\e[48;5;...m" "\e[58;5;...m"
255 "\e[38;5;255m" "\e[48;5;255m" "\e[58;5;255m"
Reset "\e[39m" "\e[49m" "\e[59m"

You can print all of the 256 colors using the following command

print "Basic 16 colors are part of the 256 colors"; for i in {0..15}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$(($((i+1))%8))#0}:+"\n"}; done; print "The Extra Colors in 256 colors"; for i in {16..231}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$(($((i-3))%12))#0}:+"\n"}; done; print "The Grayscale options in 256 colors"; for i in {232..255}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$(($((i-3))%6))#0}:+"\n"}; done

True Color is supported by some modern terminal emulators

24 bit color which is all the color we need for our puny little human eyes
You can replace any of the RGB values you want with your own custom colors

Color Foreground Background Underline
Black "\e[38;2;0;0;0m" "\e[48;2;0;0;0m" "\e[58;2;0;0;0m"
Red "\e[38;2;255;0;0m" "\e[48;2;255;0;0m" "\e[58;2;255;0;0m"
Green "\e[38;2;0;255;0m" "\e[48;2;0;255;0m" "\e[58;2;0;255;0m"
Yellow "\e[38;2;255;255;0m" "\e[48;2;255;255;0m" "\e[58;2;255;255;0m"
Blue "\e[38;2;0;0;255m" "\e[48;2;0;0;255m" "\e[58;2;0;0;255m"
Magenta "\e[38;2;255;0;255m" "\e[48;2;255;0;255m" "\e[58;2;255;0;255m"
Cyan "\e[38;2;0;255;255m" "\e[48;2;0;255;255m" "\e[58;2;0;255;255m"
White "\e[38;2;255;255;255m" "\e[48;2;255;255;255m" "\e[58;2;255;255;255m"
RGB "\e[38;2;R;G;Bm" "\e[48;2;R;G;Bm" "\e[58;2;R;G;Bm"
Reset "\e[39m" "\e[49m" "\e[59m"