[PATCH] [raw_ostream] When printing color on Windows, use the existing foreground / background color.

Aaron Ballman aaron.ballman at gmail.com
Sat Feb 28 09:31:34 PST 2015


LGTM, thank you for doing this!

~Aaron

On Fri, Feb 27, 2015 at 9:44 PM, Zachary Turner <zturner at google.com> wrote:
> Fixed a variable shadowing and removed unnecessary locals.
>
>
> http://reviews.llvm.org/D7967
>
> Files:
>   lib/Support/Windows/Process.inc
>
> Index: lib/Support/Windows/Process.inc
> ===================================================================
> --- lib/Support/Windows/Process.inc
> +++ lib/Support/Windows/Process.inc
> @@ -329,6 +329,16 @@
>  };
>
>  DefaultColors defaultColors;
> +
> +WORD fg_color(WORD color) {
> +  return color & (FOREGROUND_BLUE | FOREGROUND_GREEN |
> +                  FOREGROUND_INTENSITY | FOREGROUND_RED);
> +}
> +
> +WORD bg_color(WORD color) {
> +  return color & (BACKGROUND_BLUE | BACKGROUND_GREEN |
> +                  BACKGROUND_INTENSITY | BACKGROUND_RED);
> +}
>  }
>
>  bool Process::ColorNeedsFlush() {
> @@ -350,6 +360,7 @@
>  const char *Process::OutputColor(char code, bool bold, bool bg) {
>    if (UseANSI) return colorcodes[bg?1:0][bold?1:0][code&7];
>
> +  WORD current = DefaultColors::GetCurrentColor();
>    WORD colors;
>    if (bg) {
>      colors = ((code&1) ? BACKGROUND_RED : 0) |
> @@ -357,12 +368,14 @@
>        ((code&4) ? BACKGROUND_BLUE : 0);
>      if (bold)
>        colors |= BACKGROUND_INTENSITY;
> +    colors |= fg_color(current);
>    } else {
>      colors = ((code&1) ? FOREGROUND_RED : 0) |
>        ((code&2) ? FOREGROUND_GREEN : 0 ) |
>        ((code&4) ? FOREGROUND_BLUE : 0);
>      if (bold)
>        colors |= FOREGROUND_INTENSITY;
> +    colors |= bg_color(current);
>    }
>    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colors);
>    return 0;
>
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/



More information about the llvm-commits mailing list