+}
+
+/* Apply an ANSI escape sequence from BUF to W. BUF must start with
+ the ESC character. If BUF does not start with an ANSI escape,
+ return 0. Otherwise, apply the sequence if it is recognized, or
+ simply ignore it if not. In this case, the number of bytes read
+ from BUF is returned. */
+
+static size_t
+apply_ansi_escape (WINDOW *w, const char *buf)
+{
+ ui_file_style style = last_style;
+ size_t n_read;
+
+ if (!style.parse (buf, &n_read))
+ return n_read;
+
+ if (reverse_mode_p)
+ {
+ /* We want to reverse _only_ the default foreground/background
+ colors. If the foreground color is not the default (because
+ the text was styled), we want to leave it as is. If e.g.,
+ the terminal is fg=BLACK, and bg=WHITE, and the style wants
+ to print text in RED, we want to reverse the background color
+ (print in BLACK), but still print the text in RED. To do
+ that, we enable the A_REVERSE attribute, and re-reverse the
+ parsed-style's fb/bg colors.
+
+ Notes on the approach:
+
+ - there's no portable way to know which colors the default
+ fb/bg colors map to.
+
+ - this approach does the right thing even if you change the
+ terminal colors while GDB is running -- the reversed
+ colors automatically adapt.
+ */
+ if (!style.is_default ())
+ {
+ ui_file_style::color bg = style.get_background ();
+ ui_file_style::color fg = style.get_foreground ();
+ style.set_fg (bg);
+ style.set_bg (fg);
+ }
+
+ /* Enable A_REVERSE. */
+ style.set_reverse (true);
+ }
+
+ apply_style (w, style);