From: Eyal Soha <shawarmakarma@gmail.com>
To: git@vger.kernel.org
Subject: Fwd: Add support for axiterm colors in parse_color
Date: Tue, 7 Jan 2020 10:36:53 -0500 [thread overview]
Message-ID: <CANsz78LEZiocv_E-Hvj3iBahFFgomPb3BFNdmas2iqxqRLfRiw@mail.gmail.com> (raw)
In-Reply-To: <CANsz78K-BiswWPdhd_N25NuApcv7zSb2cw2Y9DSinkpNpuogYw@mail.gmail.com>
https://en.wikipedia.org/wiki/ANSI_escape_code
ANSI color codes 90-97 and 100-107 are brighter versions of the 30-37
and 40-47 colors. To view them, run `colortest-16`. In that
colortest, they are named with a leading "+". Maybe git config could
support those colors, too, with a leading plus in the name? They are
nice for having a different shade of a color in a diff.
Here's a patch with tests. I don't know how to submit it. Thoughts?
Eyal
diff --git a/color.c b/color.c
index ebb222ec33..a39fe7d133 100644
--- a/color.c
+++ b/color.c
@@ -33,6 +33,7 @@ struct color {
COLOR_UNSPECIFIED = 0,
COLOR_NORMAL,
COLOR_ANSI, /* basic 0-7 ANSI colors */
+ COLOR_AXITERM, /* brighter than 0-7 ANSI colors */
COLOR_256,
COLOR_RGB
} type;
@@ -95,6 +96,12 @@ static int parse_color(struct color *out, const
char *name, int len)
out->value = i;
return 0;
}
+ if (*name == '+' &&
+ match_word(name+1, len-1, color_names[i])) {
+ out->type = COLOR_AXITERM;
+ out->value = i;
+ return 0;
+ }
}
/* And finally try a literal 256-color-mode number */
@@ -166,23 +173,24 @@ int color_parse(const char *value, char *dst)
* already have the ANSI escape code in it. "out" should have enough
* space in it to fit any color.
*/
-static char *color_output(char *out, int len, const struct color *c, char type)
+static char *color_output(char *out, int len, const struct color *c,
+ const char *type)
{
switch (c->type) {
case COLOR_UNSPECIFIED:
case COLOR_NORMAL:
break;
case COLOR_ANSI:
- if (len < 2)
+ case COLOR_AXITERM:
+ if (len < strlen(type) + 1)
BUG("color parsing ran out of space");
- *out++ = type;
- *out++ = '0' + c->value;
+ out += xsnprintf(out, len, "%s%c", type, '0' + c->value);
break;
case COLOR_256:
- out += xsnprintf(out, len, "%c8;5;%d", type, c->value);
+ out += xsnprintf(out, len, "%s8;5;%d", type, c->value);
break;
case COLOR_RGB:
- out += xsnprintf(out, len, "%c8;2;%d;%d;%d", type,
+ out += xsnprintf(out, len, "%s8;2;%d;%d;%d", type,
c->red, c->green, c->blue);
break;
}
@@ -279,14 +287,24 @@ int color_parse_mem(const char *value, int
value_len, char *dst)
if (!color_empty(&fg)) {
if (sep++)
OUT(';');
- /* foreground colors are all in the 3x range */
- dst = color_output(dst, end - dst, &fg, '3');
+ /* foreground colors are in the 3x range */
+ char *range = "3";
+ if (fg.type == COLOR_AXITERM) {
+ /* axiterm fg colors are in the 9x range */
+ range = "9";
+ }
+ dst = color_output(dst, end - dst, &fg, range);
}
if (!color_empty(&bg)) {
if (sep++)
OUT(';');
/* background colors are all in the 4x range */
- dst = color_output(dst, end - dst, &bg, '4');
+ char *range = "4";
+ if (bg.type == COLOR_AXITERM) {
+ /* axiterm bg colors are in the 10x range */
+ range = "10";
+ }
+ dst = color_output(dst, end - dst, &bg, range);
}
OUT('m');
}
diff --git a/t/t4026-color.sh b/t/t4026-color.sh
index 671e951ee5..2b8430584f 100755
--- a/t/t4026-color.sh
+++ b/t/t4026-color.sh
@@ -30,6 +30,14 @@ test_expect_success 'attribute before color name' '
color "bold red" "[1;31m"
'
+test_expect_success 'axiterm bright fg color' '
+ color "+red" "[91m"
+'
+
+test_expect_success 'axiterm bright bg color' '
+ color "green +blue" "[32;104m"
+'
+
test_expect_success 'color name before attribute' '
color "red bold" "[1;31m"
'
next parent reply other threads:[~2020-01-07 15:37 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CANsz78+ugmd62F4Qk+VT7Pi=ZPtMSkZjXOwLNRCFhoS9jrOkeQ@mail.gmail.com>
[not found] ` <CANsz78K-BiswWPdhd_N25NuApcv7zSb2cw2Y9DSinkpNpuogYw@mail.gmail.com>
2020-01-07 15:36 ` Eyal Soha [this message]
2020-01-08 9:52 ` Fwd: Add support for axiterm colors in parse_color Jeff King
2020-01-10 0:20 ` Eyal Soha
2020-01-10 11:15 ` Jeff King
2020-01-10 15:02 ` Eyal Soha
2020-01-15 15:32 ` Eyal Soha
2020-01-10 15:05 ` [PATCH 1/3] color.c: Refactor color_output to use enums Eyal Soha
2020-01-10 15:05 ` [PATCH 2/3] color.c: Support bright aixterm colors Eyal Soha
2020-01-15 22:42 ` Jeff King
2020-01-10 15:05 ` [PATCH 3/3] color.c: Alias RGB colors 8-15 to " Eyal Soha
2020-01-15 22:45 ` Jeff King
2020-01-15 22:33 ` [PATCH 1/3] color.c: Refactor color_output to use enums Jeff King
2020-01-16 18:01 ` Junio C Hamano
2020-01-16 18:23 ` Jeff King
2020-01-16 19:25 ` Eyal Soha
2020-01-18 14:53 ` Eyal Soha
2020-01-18 14:53 ` [PATCH 2/3] color.c: Support bright aixterm colors Eyal Soha
2020-01-18 18:47 ` Junio C Hamano
2020-01-21 16:52 ` Eyal Soha
2020-01-21 16:56 ` [PATCH 1/3] color.c: refactor color_output arguments Eyal Soha
2020-01-21 16:56 ` [PATCH 2/3] color.c: support bright aixterm colors Eyal Soha
2020-01-23 22:54 ` Junio C Hamano
2020-01-21 16:56 ` [PATCH 3/3] color.c: alias RGB colors 8-15 to " Eyal Soha
2020-01-23 22:50 ` [PATCH 1/3] color.c: refactor color_output arguments Junio C Hamano
2020-02-11 19:36 ` [PATCH v3 0/3] es/bright-colors (hopefully final) reroll Junio C Hamano
2020-02-11 19:36 ` [PATCH v3 1/3] color.c: refactor color_output arguments Junio C Hamano
2020-02-11 19:46 ` Jeff King
2020-02-11 23:01 ` Eyal Soha
2020-02-11 23:06 ` Junio C Hamano
2020-02-11 19:36 ` [PATCH v3 2/3] color.c: support bright aixterm colors Junio C Hamano
2020-02-11 19:36 ` [PATCH v3 3/3] color.c: alias RGB colors 8-15 to " Junio C Hamano
2020-01-21 17:37 ` [PATCH 2/3] color.c: Support bright " Junio C Hamano
2020-01-18 14:53 ` [PATCH 3/3] color.c: Alias RGB colors 8-15 to " Eyal Soha
2020-01-18 18:34 ` Junio C Hamano
2020-01-18 17:51 ` [PATCH 1/3] color.c: Refactor color_output to use enums Junio C Hamano
2020-01-21 16:37 ` Eyal Soha
2020-01-21 17:49 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CANsz78LEZiocv_E-Hvj3iBahFFgomPb3BFNdmas2iqxqRLfRiw@mail.gmail.com \
--to=shawarmakarma@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).