From 162a6ff7256b88faae70988fd490f22371f3298e 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 | 11 +++++++++- gdb/tui/tui-win.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ gdb/tui/tui-win.h | 14 +++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index e7a8ac77bce..36b6ae81c45 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,12 +411,15 @@ 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 (); + + current_line_highlight_mode mode = get_current_line_highlight_mode (); + if (mode == current_line_highlight_mode::reverse_mono) + style = {}; } else { @@ -420,6 +427,8 @@ tui_set_reverse_mode (WINDOW *w, bool reverse) style.set_fg (reverse_save_fg); } + 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..426a59194a1 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,44 @@ show_tui_border_kind (struct ui_file *file, value); } +/* Implementation of the "set/show tui current-line-highlight" commands. */ + +static const char *tui_current_line_highlight_mode + = highlight_mode_reverse_styled; + +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 (); + if (TUI_DISASM_WIN != nullptr) + TUI_DISASM_WIN->refill (); +} + +/* See tui-win.h. */ + +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"); +} /* Tui internal configuration variables. These variables are updated by tui_update_variables to reflect the tui configuration @@ -1120,6 +1168,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 mode to use for the current line highlight."), _("\ +Show the mode to use for the current line highlight."), _("\ +This variable controls the mode to use for the current line indicator:\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..ae67b42273b 100644 --- a/gdb/tui/tui-win.h +++ b/gdb/tui/tui-win.h @@ -57,4 +57,18 @@ 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 video, and if source styling is enabled, display the + foreground text with style enabled. */ + reverse_styled, + + /* Reverse video, and display foreground text in background color, + with source styling disabled. */ + reverse_mono, +}; + +/* Get the current line highlight mode. */ +current_line_highlight_mode get_current_line_highlight_mode (); + #endif /* TUI_TUI_WIN_H */ base-commit: 669203174311c5be76744a879563c697cd479853 -- 2.14.5