summaryrefslogtreecommitdiff
path: root/public/term-colors.md
blob: 1682484830f4277d59ede3c393974fd18322d560 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
An explanation of common terminal emulator color codes
======================================================
---
date: "2013-03-21"
---

This is based on a post on [reddit][1], published on 2013-03-21.

[1]: http://www.reddit.com/r/commandline/comments/1aotaj/solarized_is_a_sixteen_color_palette_designed_for/c8ztxpt?context=1

> So all terminals support the same 256 colors? What about 88 color
> mode: is that a subset?

TL;DR: yes

Terminal compatibility is crazy complex, because nobody actually reads
the spec, they just write something that is compatible for their
tests. Then things have to be compatible with that terminal's quirks.

But, here's how 8-color, 16-color, and 256 color work. IIRC, 88 color
is a subset of the 256 color scheme, but I'm not sure.

**8 colors: (actually 9)**
First we had 8 colors (9 with "default", which doesn't have to be one
of the 8). These are always roughly the same color: black, red, green,
yellow/orange, blue, purple, cyan, and white, which are colors 0--7
respectively. Color 9 is default.

**16 colors: (actually 18)**
Later, someone wanted to add more colors, so they added a "bright"
attribute. So when bright is on, you get "bright red" instead of
"red". Hence 8*2=16 (plus two more for "default" and "bright
default").

**256 colors: (actually 274)**
You may have noticed, colors 0--7 and 9 are used, but 8 isn't. So,
someone decided that color 8 should put the terminal into 256 color
mode. In this mode, it reads another byte, which is an 8-bit RGB value
(2 bits for red, 2 for green, 2 for blue). The bright property has no
effect on these colors. However, a terminal can display 256-color-mode
colors and 16-color-mode colors at the same time, so you actually get
256+18 colors.