Fix colors in TUI mode in MS-Windows build with ncurses
The MS-Windows port of ncurses fails to switch to a color pair if one or both of the colors are the implicit default colors. This change records the default colors when TUI is initialized, and then specifies them explicitly when a color pair uses the default colors. This allows color styling in TUI mode on MS-Windows. gdb/ChangeLog: 2019-03-14 Eli Zaretskii <eliz@gnu.org> * tui/tui-io.c [__MINGW32__]: Include windows.h. Declare ncurses_norm_attr. (tui_initialize_io) [__MINGW32__]: Record the default terminal colors in ncurses_norm_attr. (apply_ansi_escape) [__MINGW32__]: If a color in a color pair is "none", replace it with the default color recorded in ncurses_norm_attr.
This commit is contained in:
parent
be22c732bf
commit
3fff2c370c
@ -1,3 +1,19 @@
|
||||
2019-03-14 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
The MS-Windows port of ncurses fails to switch to a color pair if
|
||||
one or both of the colors are the implicit default colors. This
|
||||
change records the default colors when TUI is initialized, and
|
||||
then specifies them explicitly when a color pair uses the default
|
||||
colors. This allows color styling in TUI mode on MS-Windows.
|
||||
|
||||
* tui/tui-io.c [__MINGW32__]: Include windows.h. Declare
|
||||
ncurses_norm_attr.
|
||||
(tui_initialize_io) [__MINGW32__]: Record the default terminal
|
||||
colors in ncurses_norm_attr.
|
||||
(apply_ansi_escape) [__MINGW32__]: If a color in a color pair is
|
||||
"none", replace it with the default color recorded in
|
||||
ncurses_norm_attr.
|
||||
|
||||
2019-03-14 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* source-cache.h (class source_cache) <get_source_lines>: Return
|
||||
|
@ -37,6 +37,9 @@
|
||||
#include "cli-out.h"
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#ifdef __MINGW32__
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include "common/filestuff.h"
|
||||
#include "completer.h"
|
||||
#include "gdb_curses.h"
|
||||
@ -47,6 +50,10 @@
|
||||
"gdb_curses.h". */
|
||||
#include "readline/readline.h"
|
||||
|
||||
#ifdef __MINGW32__
|
||||
static SHORT ncurses_norm_attr;
|
||||
#endif
|
||||
|
||||
static int tui_getc (FILE *fp);
|
||||
|
||||
static int
|
||||
@ -322,6 +329,16 @@ apply_ansi_escape (WINDOW *w, const char *buf)
|
||||
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));
|
||||
@ -807,6 +824,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
|
||||
|
Loading…
x
Reference in New Issue
Block a user