Message ID | 20200118145318.5177-3-shawarmakarma@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] color.c: Refactor color_output to use enums | expand |
Eyal Soha <shawarmakarma@gmail.com> writes: > This results in shorter output, and is _probably_ more portable. There > is at least one environment (GitHub Actions) which supports 16-color > mode but not 256-color mode. It's possible there are environments > which go the other way, but it seems unlikely. Nicely explained. > > Signed-off-by: Eyal Soha <shawarmakarma@gmail.com> > --- > color.c | 7 ++++++- > t/t4026-color.sh | 4 ++++ > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/color.c b/color.c > index 66d32e1191..ba067ed97a 100644 > --- a/color.c > +++ b/color.c > @@ -136,11 +136,16 @@ 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 + 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; > + return 0; > } else if (val < 256) { > out->type = COLOR_256; > out->value = val; > diff --git a/t/t4026-color.sh b/t/t4026-color.sh > index 78c69de90a..c0b642c1ab 100755 > --- a/t/t4026-color.sh > +++ b/t/t4026-color.sh > @@ -82,6 +82,10 @@ test_expect_success '0-7 are aliases for basic ANSI color names' ' > color "0 7" "[30;47m" > ' > > +test_expect_success '8-15 are aliases for aixterm color names' ' > + color "12 13" "[94;105m" > +' > + > test_expect_success '256 colors' ' > color "254 bold 255" "[1;38;5;254;48;5;255m" > '
diff --git a/color.c b/color.c index 66d32e1191..ba067ed97a 100644 --- a/color.c +++ b/color.c @@ -136,11 +136,16 @@ 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 + 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; + return 0; } else if (val < 256) { out->type = COLOR_256; out->value = val; diff --git a/t/t4026-color.sh b/t/t4026-color.sh index 78c69de90a..c0b642c1ab 100755 --- a/t/t4026-color.sh +++ b/t/t4026-color.sh @@ -82,6 +82,10 @@ test_expect_success '0-7 are aliases for basic ANSI color names' ' color "0 7" "[30;47m" ' +test_expect_success '8-15 are aliases for aixterm color names' ' + color "12 13" "[94;105m" +' + test_expect_success '256 colors' ' color "254 bold 255" "[1;38;5;254;48;5;255m" '
This results in shorter output, and is _probably_ more portable. There is at least one environment (GitHub Actions) which supports 16-color mode but not 256-color mode. It's possible there are environments which go the other way, but it seems unlikely. Signed-off-by: Eyal Soha <shawarmakarma@gmail.com> --- color.c | 7 ++++++- t/t4026-color.sh | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-)