Re: [RFC 8.3 0/3] Some style fixes

Eli Zaretskii
2019-03-13T15:50:12Z

For the MinGW-specific problem with TUI colors, described here:

https://www.sourceware.org/ml/gdb-patches/2019-03/msg00000.html
https://www.sourceware.org/ml/gdb-patches/2019-03/msg00034.html

I propose to fix that as in the patch below. Any objections to my
pushing this to the master and th gdb-8.3 branch (with suitable
ChangeLog entries)?

--- gdb/tui/tui-io.c~5 2019-03-12 09:18:11.713960000 +0200
+++ gdb/tui/tui-io.c 2019-03-13 09:09:15.185827600 +0200
@@ -37,6 +37,10 @@
#include "cli-out.h"
#include <fcntl.h>
#include <signal.h>
+#ifdef __MINGW32__
+#include <windows.h>
+static SHORT ncurses_norm_attr;
+#endif
#include "common/filestuff.h"
#include "completer.h"
#include "gdb_curses.h"
@@ -322,6 +326,16 @@ apply_ansi_escape (WINDOW *w, const char
int fgi, bgi;
if (get_color (fg, &fgi) && get_color (bg, &bgi))
{
+#ifdef __MINGW32__
+ /* MS-Windows port of ncurses doesn't support implicit
+ default foreground and background colors, so we must
+ specify them explicitly when needed, using the colors we
+ saw at startup. */
+ if (fgi == -1)
+ fgi = ncurses_norm_attr & 15;
+ if (bgi == -1)
+ bgi = (ncurses_norm_attr >> 4) & 15;
+#endif
int pair = get_color_pair (fgi, bgi);
if (last_color_pair != -1)
wattroff (w, COLOR_PAIR (last_color_pair));
@@ -803,6 +817,19 @@ tui_initialize_io (void)
#else
tui_rl_outstream = stdout;
#endif
+
+#ifdef __MINGW32__
+ /* MS-Windows port of ncurses doesn't support default foreground and
+ background colors, so we must record the default colors at startup. */
+ HANDLE hstdout = (HANDLE)_get_osfhandle (fileno (stdout));
+ DWORD cmode;
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+
+ if (hstdout != INVALID_HANDLE_VALUE
+ && GetConsoleMode (hstdout, &cmode) != 0
+ && GetConsoleScreenBufferInfo (hstdout, &csbi))
+ ncurses_norm_attr = csbi.wAttributes;
+#endif
}

/* Get a character from the command window. This is called from the