From 5524ac5733cc95c652c5db1aff6dde362ae08b1b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 15 Jun 2020 19:35:10 +0100 Subject: [PATCH] set tui current-line-highlight-mode reverse-styled|reverse-mono --- gdb/tui/tui-io.c | 25 +++++++++++++++++-------- gdb/tui/tui-win.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ gdb/tui/tui-win.h | 8 ++++++++ 3 files changed, 80 insertions(+), 8 deletions(-) diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index e7a8ac77bce..4a012ca0eea 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -365,6 +365,10 @@ apply_ansi_escape (WINDOW *w, const char *buf) if (reverse_mode_p) { + current_line_highlight_mode mode = get_current_line_highlight_mode (); + if (mode == current_line_highlight_mode::reverse_mono) + return n_read; + /* 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., @@ -407,19 +411,24 @@ tui_set_reverse_mode (WINDOW *w, bool reverse) ui_file_style style = last_style; reverse_mode_p = reverse; - style.set_reverse (reverse); if (reverse) { - reverse_save_bg = style.get_background (); - reverse_save_fg = style.get_foreground (); - } - else - { - style.set_bg (reverse_save_bg); - style.set_fg (reverse_save_fg); + current_line_highlight_mode mode = get_current_line_highlight_mode (); + switch (mode) + { + case current_line_highlight_mode::reverse_styled: + reverse_save_bg = style.get_background (); + reverse_save_fg = style.get_foreground (); + break; + case current_line_highlight_mode::reverse_mono: + style = {}; + break; + } } + style.set_reverse (reverse); + tui_apply_style (w, style); } diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index a78837fe689..81eeb090888 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -108,6 +108,16 @@ static const char *const tui_border_mode_enums[] = { NULL }; +static const char *highlight_mode_reverse_styled = "reverse-styled"; +static const char *highlight_mode_reverse_mono = "reverse-mono"; + +/* Possible values for tui-current-line-highlight variable. */ +static const char *const tui_current_line_highlight_mode_enums[] = { + highlight_mode_reverse_styled, + highlight_mode_reverse_mono, + NULL +}; + struct tui_translate { const char *name; @@ -218,6 +228,39 @@ show_tui_border_kind (struct ui_file *file, value); } +/* Tui configuration variables controlled with set/show command. */ +static const char *tui_current_line_highlight_mode + = highlight_mode_reverse_styled; + +current_line_highlight_mode +get_current_line_highlight_mode () +{ + for (int i = 0; i < ARRAY_SIZE (tui_current_line_highlight_mode_enums); i++) + if (tui_current_line_highlight_mode + == tui_current_line_highlight_mode_enums[i]) + return (current_line_highlight_mode) i; + + gdb_assert_not_reached ("unknown mode"); +} + +static void +show_tui_current_line_highlight_mode (struct ui_file *file, + int from_tty, + struct cmd_list_element *c, + const char *value) +{ + fprintf_filtered (file, _("\ +The mode to use for the current source highlight is \"%s\".\n"), + value); +} + +static void +set_tui_current_line_highlight_mode (const char *ignore, int from_tty, + struct cmd_list_element *c) +{ + if (TUI_SRC_WIN != nullptr) + TUI_SRC_WIN->refill (); +} /* Tui internal configuration variables. These variables are updated by tui_update_variables to reflect the tui configuration @@ -1120,6 +1163,18 @@ the line numbers and uses less horizontal space."), tui_set_compact_source, tui_show_compact_source, &tui_setlist, &tui_showlist); + add_setshow_enum_cmd ("current-line-highlight-mode", no_class, + tui_current_line_highlight_mode_enums, + &tui_current_line_highlight_mode, _("\ +Set the attribute mode to use for the active TUI window border."), _("\ +Show the attribute mode to use for the active TUI window border."), _("\ +This variable controls the attributes to use for the active window border:\n\ + reverse-styled use reverse video for the background, and style the text\n\ + reverse-mono use reverse video for the background, don't style the text"), + set_tui_current_line_highlight_mode, + show_tui_current_line_highlight_mode, + &tui_setlist, &tui_showlist); + tui_border_style.changed.attach (tui_rehighlight_all); tui_active_border_style.changed.attach (tui_rehighlight_all); } diff --git a/gdb/tui/tui-win.h b/gdb/tui/tui-win.h index e3791846307..f6a39bbf437 100644 --- a/gdb/tui/tui-win.h +++ b/gdb/tui/tui-win.h @@ -57,4 +57,12 @@ struct cmd_list_element **tui_get_cmd_list (void); /* Whether compact source display should be used. */ extern bool compact_source; +enum current_line_highlight_mode +{ + reverse_styled, + reverse_mono, +}; + +current_line_highlight_mode get_current_line_highlight_mode (); + #endif /* TUI_TUI_WIN_H */ base-commit: 669203174311c5be76744a879563c697cd479853 -- 2.14.5