[RFC,8.3,2/3] Add the "set style source" command

Message ID 20190308210433.32683-3-tromey@adacore.com
State New, archived
Headers

Commit Message

Tom Tromey March 8, 2019, 9:04 p.m. UTC
  This adds "set style source" (and "show style source") commands.  This
gives the user control over whether source code is highlighted.

gdb/ChangeLog
2019-03-08  Tom Tromey  <tromey@adacore.com>

	* NEWS: Add item for "style sources" commands.
	* source-cache.c (source_cache::get_source_lines): Check
	source_styling.
	* cli/cli-style.c (source_styling): New global.
	(_initialize_cli_style): Add "style sources" commands.
	(show_style_sources): New function.
	* cli/cli-style.h (source_styling): Declare.

gdb/doc/ChangeLog
2019-03-08  Tom Tromey  <tromey@adacore.com>

	* gdb.texinfo (Output Styling): Document "set style source" and
	"show style source".

gdb/testsuite/ChangeLog
2019-03-08  Tom Tromey  <tromey@adacore.com>

	* gdb.base/style.exp: Add "set style sources" test.
---
 gdb/ChangeLog                    | 10 ++++++++++
 gdb/NEWS                         |  6 ++++++
 gdb/cli/cli-style.c              | 22 ++++++++++++++++++++++
 gdb/cli/cli-style.h              |  3 +++
 gdb/doc/ChangeLog                |  5 +++++
 gdb/doc/gdb.texinfo              |  9 +++++++++
 gdb/source-cache.c               |  2 +-
 gdb/testsuite/ChangeLog          |  4 ++++
 gdb/testsuite/gdb.base/style.exp |  6 ++++++
 9 files changed, 66 insertions(+), 1 deletion(-)
  

Comments

Eli Zaretskii March 9, 2019, 6:16 a.m. UTC | #1
> From: Tom Tromey <tromey@adacore.com>
> Cc: Tom Tromey <tromey@adacore.com>
> Date: Fri,  8 Mar 2019 14:04:32 -0700
> 
> This adds "set style source" (and "show style source") commands.  This
> gives the user control over whether source code is highlighted.

Thanks.

> +set style sources [on|off]
> +show style sources
> +  Enable or disable source code styling.  Source code styling is
> +  enabled by default, but only takes effect if styling in general is
> +  enabled, if if GDB was linked with GNU Source Highlight.
              ^^^^^
A typo (you probably meant "and if").

Otherwise, the documentation parts are OK, thanks.
  
Philippe Waroquiers March 9, 2019, 11:18 a.m. UTC | #2
On Fri, 2019-03-08 at 14:04 -0700, Tom Tromey wrote:
> diff --git a/gdb/NEWS b/gdb/NEWS
> index cc7c35c0642..06564311643 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -145,6 +145,12 @@ show style enabled
>    Enable or disable terminal styling.  Styling is enabled by default
>    on most hosts, but disabled by default when in batch mode.
>  
> +set style sources [on|off]
> +show style sources
> +  Enable or disable source code styling.  Source code styling is
> +  enabled by default, but only takes effect if styling in general is
> +  enabled, if if GDB was linked with GNU Source Highlight.
As already reported by Eli : if if -> and if ?

Also, this NEWS entry explains that 'on' takes effect only
if styling is on, but neither the help nor the user manual
are explaining this.
Maybe the help and/or user manual should also explain this ?

Thanks

Philippe
  
Tom Tromey March 11, 2019, 8:13 p.m. UTC | #3
>> +  enabled, if if GDB was linked with GNU Source Highlight.
Eli>               ^^^^^
Eli> A typo (you probably meant "and if").

Thanks, I've fixed this.
New version to arrive soon.

Tom
  

Patch

diff --git a/gdb/NEWS b/gdb/NEWS
index cc7c35c0642..06564311643 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -145,6 +145,12 @@  show style enabled
   Enable or disable terminal styling.  Styling is enabled by default
   on most hosts, but disabled by default when in batch mode.
 
+set style sources [on|off]
+show style sources
+  Enable or disable source code styling.  Source code styling is
+  enabled by default, but only takes effect if styling in general is
+  enabled, if if GDB was linked with GNU Source Highlight.
+
 set style filename foreground COLOR
 set style filename background COLOR
 set style filename intensity VALUE
diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c
index 729a024c47a..6b3e92f9ec4 100644
--- a/gdb/cli/cli-style.c
+++ b/gdb/cli/cli-style.c
@@ -31,6 +31,11 @@  int cli_styling = 0;
 int cli_styling = 1;
 #endif
 
+/* True if source styling is enabled.  Note that this is only
+   consulted when cli_styling is true.  */
+
+int source_styling = 1;
+
 /* Name of colors; must correspond to ui_file_style::basic_color.  */
 static const char * const cli_colors[] = {
   "none",
@@ -230,6 +235,16 @@  show_style_enabled (struct ui_file *file, int from_tty,
     fprintf_filtered (file, _("CLI output styling is disabled.\n"));
 }
 
+static void
+show_style_sources (struct ui_file *file, int from_tty,
+		    struct cmd_list_element *c, const char *value)
+{
+  if (source_styling)
+    fprintf_filtered (file, _("Source code styling is enabled.\n"));
+  else
+    fprintf_filtered (file, _("Source code styling is disabled.\n"));
+}
+
 void
 _initialize_cli_style ()
 {
@@ -249,6 +264,13 @@  If enabled, output to the terminal is styled."),
 			   set_style_enabled, show_style_enabled,
 			   &style_set_list, &style_show_list);
 
+  add_setshow_boolean_cmd ("sources", no_class, &source_styling, _("\
+Set whether source code styling is enabled."), _("\
+Show whether source code styling is enabled."), _("\
+If enabled, source code is styled."),
+			   set_style_enabled, show_style_sources,
+			   &style_set_list, &style_show_list);
+
 #define STYLE_ADD_SETSHOW_COMMANDS(STYLE, NAME, PREFIX_DOC)	  \
   STYLE.add_setshow_commands (NAME, no_class, PREFIX_DOC,		\
 			      &style_set_list,				\
diff --git a/gdb/cli/cli-style.h b/gdb/cli/cli-style.h
index 287bad7d201..c0520f9e23f 100644
--- a/gdb/cli/cli-style.h
+++ b/gdb/cli/cli-style.h
@@ -93,6 +93,9 @@  extern cli_style_option variable_name_style;
 /* The address style.  */
 extern cli_style_option address_style;
 
+/* True if source styling is enabled.  */
+extern int source_styling;
+
 /* True if styling is enabled.  */
 extern int cli_styling;
 
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index f2028f86b0d..346d3c8d6be 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -24525,6 +24525,15 @@  most hosts defaulting to @samp{on}.
 
 @item show style enabled
 Show the current state of styling.
+
+@item set style sources @samp{on|off}
+Enable or disable source code styling.  This affects whether source
+code, such as the output of the @code{list} command, is styled.  This
+only works if @value{GDBN} was linked with the GNU Source Highlight
+library.  The default is @samp{on}.
+
+@item show style sources
+Show the current state of source code styling.
 @end table
 
 Subcommands of @code{set style} control specific forms of styling.
diff --git a/gdb/source-cache.c b/gdb/source-cache.c
index 097c8a3ae12..27a0ade959c 100644
--- a/gdb/source-cache.c
+++ b/gdb/source-cache.c
@@ -174,7 +174,7 @@  source_cache::get_source_lines (struct symtab *s, int first_line,
     return false;
 
 #ifdef HAVE_SOURCE_HIGHLIGHT
-  if (can_emit_style_escape (gdb_stdout))
+  if (source_styling && can_emit_style_escape (gdb_stdout))
     {
       const char *fullname = symtab_to_fullname (s);
 
diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp
index 2778001fed5..369c1f59a88 100644
--- a/gdb/testsuite/gdb.base/style.exp
+++ b/gdb/testsuite/gdb.base/style.exp
@@ -50,6 +50,12 @@  save_vars { env(TERM) } {
 	"$main_expr.*$arg_expr.*$arg_expr.*$file_expr.*"
     gdb_test "info breakpoints" "$main_expr at $file_expr.*"
 
+    gdb_test_no_output "set style sources off"
+    gdb_test "frame" \
+	"\r\n\[^\033\]*break here.*" \
+	"frame without styling"
+    gdb_test_no_output "set style sources on"
+
     gdb_test "break main" "file $base_file_expr.*"
 
     gdb_test "print &main" " = .* \033\\\[34m$hex\033\\\[m <$main_expr>"