diff options
author | Timo Hirvonen <tihirvon@gmail.com> | 2006-07-13 19:08:06 +0300 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-07-13 21:53:25 -0700 |
commit | f5b571fcf7929ca6e85b3c35c4bb96db305d0b1e (patch) | |
tree | 645347189b7f8af44607687416f8ea61169f3553 | |
parent | f37399e6b0689b8b9a5a4cf9149ede5a39fca549 (diff) | |
download | git-f5b571fcf7929ca6e85b3c35c4bb96db305d0b1e.tar.gz git-f5b571fcf7929ca6e85b3c35c4bb96db305d0b1e.tar.xz |
diff: Support 256 colors
Add support for more than 8 colors. Colors can be specified as numbers
-1..255. -1 is same as "normal".
Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | diff.c | 24 |
1 files changed, 18 insertions, 6 deletions
@@ -26,8 +26,8 @@ enum color_diff { DIFF_FILE_NEW = 5, }; -/* "\033[1;30;47m\0" is 11 bytes */ -static char diff_colors[][16] = { +/* "\033[1;38;5;2xx;48;5;2xxm\0" is 23 bytes */ +static char diff_colors[][24] = { "\033[m", /* reset */ "", /* normal */ "\033[1m", /* bold */ @@ -57,12 +57,16 @@ static int parse_color(const char *name, int len) "normal", "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" }; + char *end; int i; for (i = 0; i < ARRAY_SIZE(color_names); i++) { const char *str = color_names[i]; if (!strncasecmp(name, str, len) && !str[len]) return i - 1; } + i = strtol(name, &end, 10); + if (*name && !*end && i >= -1 && i <= 255) + return i; return -2; } @@ -135,14 +139,22 @@ static void parse_diff_color_value(const char *value, const char *var, char *dst if (fg >= 0) { if (sep++) *dst++ = ';'; - *dst++ = '3'; - *dst++ = '0' + fg; + if (fg < 8) { + *dst++ = '3'; + *dst++ = '0' + fg; + } else { + dst += sprintf(dst, "38;5;%d", fg); + } } if (bg >= 0) { if (sep++) *dst++ = ';'; - *dst++ = '4'; - *dst++ = '0' + bg; + if (bg < 8) { + *dst++ = '4'; + *dst++ = '0' + bg; + } else { + dst += sprintf(dst, "48;5;%d", bg); + } } *dst++ = 'm'; } |