From a3a5db1311aff0c8d432eca6ed70dfbe9696e33c Mon Sep 17 00:00:00 2001 From: Nipunn Koorapati Date: Mon, 13 Jul 2020 00:59:29 +0000 Subject: [PATCH] Add comments and limit to standard colors --- watch.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/watch.c b/watch.c index cfe191be..51cc880f 100644 --- a/watch.c +++ b/watch.c @@ -137,23 +137,34 @@ static void init_ansi_colors(void) } -static int color_escape_sequence(char** escape_sequence) { +static int process_ansi_color_escape_sequence(char** escape_sequence) { + // process SGR ANSI color escape sequence + // Eg 8-bit + // 38;5;⟨n⟩ (set fg color to n) + // 48;5;⟨n⟩ (set bg color to n) + // + // Eg 24-bit (not yet implemented) + // ESC[ 38;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB foreground color + // ESC[ 48;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB background color int num; if ((*escape_sequence)[0] != ';') return 0; /* not understood */ if ((*escape_sequence)[1] == '5') { - // 8 bit! + // 8 bit! ANSI specifies a predefined set of 256 colors here. if ((*escape_sequence)[2] != ';') return 0; /* not understood */ num = strtol((*escape_sequence) + 3, escape_sequence, 10); if (num >= 0 && num <= 7) { + // 0-7 are standard colors same as SGR 30-37 return num + 1; - } else if (num >= 8 && num <= 15) { - // Bright intensity colors. Show them as normal for simplicty of impl - return num - 8 + 1; } + + // Remainder aren't yet implemented + // 8- 15: high intensity colors (as in ESC [ 90–97 m) + // 16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) + // 232-255: grayscale from black to white in 24 steps } return 0; /* not understood */ @@ -209,7 +220,7 @@ static int set_ansi_attribute(const int attrib, char** escape_sequence) attributes &= ~A_REVERSE; break; case 38: - fg_col = color_escape_sequence(escape_sequence); + fg_col = process_ansi_color_escape_sequence(escape_sequence); if (fg_col == 0) { return 0; /* not understood */ } @@ -218,7 +229,7 @@ static int set_ansi_attribute(const int attrib, char** escape_sequence) fg_col = 0; break; case 48: - bg_col = color_escape_sequence(escape_sequence); + bg_col = process_ansi_color_escape_sequence(escape_sequence); if (bg_col == 0) { return 0; /* not understood */ }