gdb: add "set style tui-current-position on|off", default to off

As discussed at:

 https://sourceware.org/pipermail/gdb-patches/2020-June/169519.html

this patch disables source and assembly code highlighting for the
text highlighted by the TUI's current position indicator, and adds a
command to enable it back.
This commit is contained in:
Pedro Alves 2022-11-01 16:45:30 +00:00 committed by Andrew Burgess
parent feb5926e8a
commit 92c1d07de5
7 changed files with 83 additions and 5 deletions

View File

@ -73,6 +73,11 @@
For both /r and /b GDB is now better at using whitespace in order to
align the disassembled instruction text.
* The TUI no longer styles the source and assembly code highlighted by
the current position indicator by default. You can however
re-enable styling using the new "set style tui-current-position"
command.
* New commands
maintenance set ignore-prologue-end-flag on|off
@ -117,6 +122,10 @@ set debug infcall on|off
show debug infcall
Print additional debug messages about inferior function calls.
set style tui-current-position [on|off]
Whether to style the source and assembly code highlighted by the
TUI's current position indicator. The default is off.
* Changed commands
document user-defined

View File

@ -296,8 +296,8 @@ cli_style_option::add_setshow_commands (enum command_class theclass,
return prefix_cmds;
}
static cmd_list_element *style_set_list;
static cmd_list_element *style_show_list;
cmd_list_element *style_set_list;
cmd_list_element *style_show_list;
/* The command list for 'set style disassembler'. */

View File

@ -26602,6 +26602,15 @@ then it will be used.
@item show style sources
Show the current state of source code styling.
@item set style tui-current-position @samp{on|off}
Enable or disable styling of the source and assembly code highlighted
by the TUI's current position indicator. The default is @samp{off}.
@xref{TUI, ,@value{GDBN} Text User Interface}.
@item show style tui-current-position
Show whether the source and assembly code highlighted by the TUI's
current position indicator is styled.
@anchor{style_disassembler_enabled}
@item set style disassembler enabled @samp{on|off}
Enable or disable disassembler styling. This affects whether
@ -29163,8 +29172,12 @@ This window shows the processor registers. Registers are highlighted
when their values change.
@end table
The source and assembly windows show the current program position
by highlighting the current line and marking it with a @samp{>} marker.
The source and assembly windows show the current program position by
highlighting the current line and marking it with a @samp{>} marker.
By default, source and assembly code styling is disabled for the
highlighted text, but you can enable it with the @code{set style
tui-current-position on} command. @xref{Output Styling}.
Breakpoints are indicated with two markers. The first marker
indicates the breakpoint type:

View File

@ -65,4 +65,8 @@ extern void print_command_line (struct command_line *, unsigned int,
extern void print_command_lines (struct ui_out *,
struct command_line *, unsigned int);
/* Chains containing all defined "set/show style" subcommands. */
extern struct cmd_list_element *style_set_list;
extern struct cmd_list_element *style_show_list;
#endif /* !defined (GDBCMD_H) */

View File

@ -369,6 +369,9 @@ apply_ansi_escape (WINDOW *w, const char *buf)
if (reverse_mode_p)
{
if (!style_tui_current_position)
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.,
@ -411,12 +414,18 @@ 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 ();
if (!style_tui_current_position)
{
/* Switch to default style (reversed) while highlighting the
current position. */
style = {};
}
}
else
{
@ -424,6 +433,8 @@ tui_set_reverse_mode (WINDOW *w, bool reverse)
style.set_fg (reverse_save_fg);
}
style.set_reverse (reverse);
tui_apply_style (w, style);
}

View File

@ -218,6 +218,30 @@ show_tui_border_kind (struct ui_file *file,
value);
}
/* Implementation of the "set/show style tui-current-position" commands. */
bool style_tui_current_position = false;
static void
show_style_tui_current_position (ui_file *file,
int from_tty,
cmd_list_element *c,
const char *value)
{
gdb_printf (file, _("\
Styling the text highlighted by the TUI's current position indicator is %s.\n"),
value);
}
static void
set_style_tui_current_position (const char *ignore, int from_tty,
cmd_list_element *c)
{
if (TUI_SRC_WIN != nullptr)
TUI_SRC_WIN->refill ();
if (TUI_DISASM_WIN != nullptr)
TUI_DISASM_WIN->refill ();
}
/* Tui internal configuration variables. These variables are updated
by tui_update_variables to reflect the tui configuration
@ -1195,6 +1219,19 @@ the line numbers and uses less horizontal space."),
tui_set_compact_source, tui_show_compact_source,
&tui_setlist, &tui_showlist);
add_setshow_boolean_cmd ("tui-current-position", class_maintenance,
&style_tui_current_position, _("\
Set whether to style text highlighted by the TUI's current position indicator."),
_("\
Show whether to style text highlighted by the TUI's current position indicator."),
_("\
When enabled, the source and assembly code highlighted by the TUI's current\n\
position indicator is styled."),
set_style_tui_current_position,
show_style_tui_current_position,
&style_set_list,
&style_show_list);
tui_border_style.changed.attach (tui_rehighlight_all, "tui-win");
tui_active_border_style.changed.attach (tui_rehighlight_all, "tui-win");
}

View File

@ -51,4 +51,8 @@ struct cmd_list_element **tui_get_cmd_list (void);
/* Whether compact source display should be used. */
extern bool compact_source;
/* Whether to style the source and assembly code highlighted by the TUI's
current position indicator. */
extern bool style_tui_current_position;
#endif /* TUI_TUI_WIN_H */