From: Jeff King <peff@peff.net>
To: Eyal Soha <shawarmakarma@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: Fwd: Add support for axiterm colors in parse_color
Date: Fri, 10 Jan 2020 06:15:16 -0500 [thread overview]
Message-ID: <20200110111516.GA474613@coredump.intra.peff.net> (raw)
In-Reply-To: <CANsz78Lm3ggVZLrSxM5tc0MozFMdAmVBOix_3sjJT4+s3VHLPQ@mail.gmail.com>
On Thu, Jan 09, 2020 at 07:20:09PM -0500, Eyal Soha wrote:
> > That said, I'm not entirely opposed to having more human-readable
> > aliases. I'm not sure if it's worth using the 16-color version (e.g.,
> > "ESC[91m" versus the 256-color version "ESC[38;5;9m"). It's possible it
> > would be compatible with more terminals, and it is slightly fewer bytes.
>
> My motivation for this patch was to fix the github workflow log output
> that doesn't support 8bit colors properly. Only the "ANSI" colors
> 0-15 worked. None of the 8-bit colors worked except for 30-37, 40-47,
> 90-97, and 100-107, which matched the ANSI colors. That is a very
> broken color scheme! But that's how it displayed.
That makes sense. I'm not too surprised to see a terminal that supports
one but not the other.
But I wonder if there are ones that go the other way around: supporting
256-color mode but not ANSI 90-97, etc. I doubt it, but I think it would
be nice to split that change out into a separate commit in case we do
run into problems.
> Done. Here's a new patch!
Thanks. The content here is looking pretty good (though I have a few
comments below).
Can you also format it as described in Documentation/SubmittingPatches
and re-send? In particular, it needs a regular commit message and your
signoff.
> +enum {
> + COLOR_BACKGROUND_OFFSET = 10,
> + COLOR_FOREGROUND_ANSI = 30,
> + COLOR_FOREGROUND_RGB = 38,
> + COLOR_FOREGROUND_256 = 38,
> + COLOR_FOREGROUND_BRIGHT_ANSI = 90,
> +};
The split in this enum mostly makes sense to me. It changes the meaning
of "value" for COLOR_ANSI, but this is all local to color.c, so your
changes to output_color() are all that's needed.
It might be easier to follow the patch if switching to this enum came in
a separate preparatory patch.
> @@ -92,7 +100,13 @@ static int parse_color(struct color *out, const
> char *name, int len)
> for (i = 0; i < ARRAY_SIZE(color_names); i++) {
> if (match_word(name, len, color_names[i])) {
> out->type = COLOR_ANSI;
> - out->value = i;
> + out->value = i + COLOR_FOREGROUND_ANSI;
> + return 0;
> + }
> + if (*name == '+' &&
> + match_word(name+1, len-1, color_names[i])) {
> + out->type = COLOR_ANSI;
> + out->value = i + COLOR_FOREGROUND_BRIGHT_ANSI;
> return 0;
> }
It would be slightly simpler and more efficient handle the "+" outside
the loop, like:
int offset = COLOR_FOREGROUND_ANSI;
if (*name == '+') {
offset = COLOR_FOREGROUND_BRIGHT_ANSI;
name++;
len--;
}
and then in the loop just set "out->value = i + offset".
You'd probably want to hoist this out to a separate function since
"name" needs to be unchanged in the later part of the function.
I dunno. It's almost certainly an unmeasurable micro-optimization, but
somehow the flow of it seems simpler to me.
I also wondered if we'd want English aliases like "brightred" that some
other systems use. It would be easy to add that to the check I showed
above without having to repeat as much.
> @@ -109,10 +123,15 @@ static int parse_color(struct color *out, const
> char *name, int len)
> else if (val < 0) {
> out->type = COLOR_NORMAL;
> return 0;
> - /* Rewrite low numbers as more-portable standard colors. */
> + /* Rewrite 0-7 as more-portable standard colors. */
> } else if (val < 8) {
> out->type = COLOR_ANSI;
> - out->value = val;
> + out->value = val + COLOR_FOREGROUND_ANSI;
> + return 0;
> + /* Rewrite 8-15 as more-portable aixterm colors. */
> + } else if (val < 16) {
> + out->type = COLOR_ANSI;
> + out->value = val - 8 + COLOR_FOREGROUND_BRIGHT_ANSI;
And I think this 8-15 handling might want to be a separate commit on
top, just because it's possible it might regress some cases (though
again, I do doubt it).
> case COLOR_256:
> - out += xsnprintf(out, len, "%c8;5;%d", type, c->value);
> + out += xsnprintf(out, len, "%d;5;%d", COLOR_FOREGROUND_256 + offset,
> + c->value);
Looks like some unwanted tab/space conversion (here and elsewhere).
> +test_expect_success 'axiterm bright fg color' '
> + color "+red" "[91m"
s/axi/aix/ (here and below).
> +test_expect_success '8-15 are aliases for aixterm color names' '
> + color "12 13" "[94;105m"
Makes sense.
-Peff
next prev parent reply other threads:[~2020-01-10 11:15 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 ` Fwd: Add support for axiterm colors in parse_color Eyal Soha
2020-01-08 9:52 ` Jeff King
2020-01-10 0:20 ` Eyal Soha
2020-01-10 11:15 ` Jeff King [this message]
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200110111516.GA474613@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=shawarmakarma@gmail.com \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).