I sent out my patches. Can someone take a look? Thanks, Eyal On Fri, Jan 10, 2020 at 10:02 AM Eyal Soha <shawarmakarma@xxxxxxxxx> wrote: > > Thanks. I think that 3 patches are in order. The first will refactor > and add the enums. The second will add the aixterm colors. The last > will alias RGB 8-15 to aixterm colors. > > What's the correct way to email those patches? I will try with > git-send-email. BTW, is "git help send-email" supposed to work? > > Eyal > On Fri, Jan 10, 2020 at 6:15 AM Jeff King <peff@xxxxxxxx> wrote: > > > > 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