gdb: add "set style tui-current-position on|off", default to off
authorPedro Alves <palves@redhat.com>
Tue, 1 Nov 2022 16:45:30 +0000 (16:45 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Wed, 16 Nov 2022 10:34:19 +0000 (10:34 +0000)
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.

gdb/NEWS
gdb/cli/cli-style.c
gdb/doc/gdb.texinfo
gdb/gdbcmd.h
gdb/tui/tui-io.c
gdb/tui/tui-win.c
gdb/tui/tui-win.h

index 0642d7637b8103666cf8d0369613a9c776dc9d81..3f31515297c9178c0ee9a7b8ad4e7d08796882b1 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
   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
index abf685561fad6822acde9366dddc232ee5bd67d9..062347b27d0fb8870e88bde9f63c2824a77aaf9d 100644 (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'.  */
 
index ea66f4ee42d4364c22e357a0c28077a3510a8a80..f5f664fd16855a2596e0f8004265189fd3856ea9 100644 (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:
 
index a05c68e52c25e3682945263a8e66896b59eb198d..c508870a93064cc11f5b897c7af79e871de5d98d 100644 (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) */
index a30000ef626b3be69a55360fe1cd774c6c3bf289..5278c380fc493d3ba1a70c13a7da949f61bdb47c 100644 (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);
 }
 
index 31b6606636ad5c24ab80aea4c22a68270d02f301..e24763c0072d879b8489ea1bfd52615403373b74 100644 (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");
 }
index 9a92fa3a514f223e3b2c5b157d6ed9638fe9abe3..bdc6da034ef705774d64b261fe5daeffffee6ab7 100644 (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 */