gdb: add new version style
authorAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 13 Jan 2021 20:08:51 +0000 (20:08 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 22 Jan 2021 19:09:31 +0000 (19:09 +0000)
This commit adds a new 'version' style, which replaces the hard coded
styling currently used for GDB's version string.  GDB's version number
is displayed:

  1. In the output of 'show version', and

  2. When GDB starts up (without the --quiet option).

This new style can only ever affect the first of these two cases as
the second case is printed before GDB has processed any initialization
files, or processed any GDB commands passed on the command line.

However, because the first case exists I think this commit makes
sense, it means the style is no longer hard coded into GDB, and we can
add some tests that the style can be enabled/disabled correctly.

This commit is an alternative to a patch Tom posted here:

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

I've used the style name 'version' instead of 'startup' to reflect
what the style is actually used for.  If other parts of the startup
text end up being highlighted I imagine they would get their own
styles based on what is being highlighted.  I feel this is more inline
with the other style names that are already in use within GDB.

I also decoupled adding this style from the idea of startup options,
and the possibility of auto-saving startup options.  Those ideas can
be explored in later patches.

This commit should probably be considered only a partial solution to
issue PR cli/25956.  The colours of the style are no longer hard
coded, however, it is still impossible to change the styling of the
version string displayed during startup, so in one sense, the styling
of that string is still "hard coded".  A later patch will hopefully
extend GDB to allow it to adjust the version styling before the
initial version string is printed.

gdb/ChangeLog:

PR cli/25956
* cli/cli-style.c: Add 'cli/cli-setshow.h' include.
(version_style): Define.
(cli_style_option::cli_style_option): Add intensity parameter, and
use as appropriate.
(_initialize_cli_style): Register version style set/show commands.
* cli/cli-style.h (cli_style_option): Add intensity parameter.
(version_style): Declare.
* top.c (print_gdb_version): Use version_stype, and styled_string
to print the GDB version string.

gdb/doc/ChangeLog:

PR cli/25956
* gdb.texinfo (Output Styling): Document version style.

gdb/testsuite/ChangeLog:

PR cli/25956
* gdb.base/style.exp (run_style_tests): Add version string test.
(test_startup_version_string): Use version style name.
* lib/gdb-utils.exp (style): Handle version style name.

gdb/ChangeLog
gdb/NEWS
gdb/cli/cli-style.c
gdb/cli/cli-style.h
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/style.exp
gdb/testsuite/lib/gdb-utils.exp
gdb/top.c

index 18368305715f8ea1e74aee177ca8df0139597c69..bbb00e4dfd0159e64c44be1ce3d16aaf229ddfa7 100644 (file)
@@ -1,3 +1,17 @@
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       PR cli/25956
+       * NEWS: Mention new command.
+       * cli/cli-style.c: Add 'cli/cli-setshow.h' include.
+       (version_style): Define.
+       (cli_style_option::cli_style_option): Add intensity parameter, and
+       use as appropriate.
+       (_initialize_cli_style): Register version style set/show commands.
+       * cli/cli-style.h (cli_style_option): Add intensity parameter.
+       (version_style): Declare.
+       * top.c (print_gdb_version): Use version_stype, and styled_string
+       to print the GDB version string.
+
 2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * utils.c (emit_style_escape): Only emit an escape sequence if the
index 66702862efb283a238e9f5ef80d6b473cae4c108..d2ed28857b0c05c5fe1f4e7cd54f5b24641e396b 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -75,6 +75,11 @@ maintenance flush-symbol-cache
   'maintenance flush register-cache' and 'maintenance flush
   symbol-cache' respectively.
 
+set style version foreground COLOR
+set style version background COLOR
+set style version intensity VALUE
+  Control the styling of GDB's version number text.
+
 *** Changes in GDB 10
 
 * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
index cbedd30ea74d0adf97fb0238867b910392e15cc0..8b4b6b24cda4396fdef7aaa66f82403a437b10c4 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "defs.h"
 #include "cli/cli-cmds.h"
+#include "cli/cli-setshow.h"
 #include "cli/cli-style.h"
 #include "source-cache.h"
 #include "observable.h"
@@ -98,13 +99,19 @@ cli_style_option metadata_style ("metadata", ui_file_style::DIM);
 
 /* See cli-style.h.  */
 
+cli_style_option version_style ("version", ui_file_style::MAGENTA,
+                               ui_file_style::BOLD);
+
+/* See cli-style.h.  */
+
 cli_style_option::cli_style_option (const char *name,
-                                   ui_file_style::basic_color fg)
+                                   ui_file_style::basic_color fg,
+                                   ui_file_style::intensity intensity)
   : changed (name),
     m_name (name),
     m_foreground (cli_colors[fg - ui_file_style::NONE]),
     m_background (cli_colors[0]),
-    m_intensity (cli_intensities[ui_file_style::NORMAL])
+    m_intensity (cli_intensities[intensity])
 {
 }
 
@@ -382,4 +389,10 @@ TUI window that does have the focus."),
                                                &style_set_list,
                                                &style_show_list,
                                                true);
+
+  version_style.add_setshow_commands (no_class, _("\
+Version string display styling.\n\
+Configure colors used to display the GDB version string."),
+                                     &style_set_list, &style_show_list,
+                                     false);
 }
index cd51bf4aa944b75e555301d5f329e630854672d2..187e1d07ce7dbc12d8dd8c6a6bee626af2c9a773 100644 (file)
@@ -30,7 +30,8 @@ class cli_style_option
 public:
 
   /* Construct a CLI style option with a foreground color.  */
-  cli_style_option (const char *name, ui_file_style::basic_color fg);
+  cli_style_option (const char *name, ui_file_style::basic_color fg,
+                   ui_file_style::intensity = ui_file_style::NORMAL);
 
   /* Construct a CLI style option with an intensity.  */
   cli_style_option (const char *name, ui_file_style::intensity i);
@@ -124,6 +125,9 @@ extern cli_style_option tui_border_style;
 /* The border style of a TUI window that does have the focus.  */
 extern cli_style_option tui_active_border_style;
 
+/* The style to use for the GDB version string.  */
+extern cli_style_option version_style;
+
 /* True if source styling is enabled.  */
 extern bool source_styling;
 
index be37ac444ec80eee528a527bcc29bcba09baefe7..8f0ae35cf7ed023319d264b96ac579c6811d463a 100644 (file)
@@ -1,3 +1,8 @@
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       PR cli/25956
+       * gdb.texinfo (Output Styling): Document version style.
+
 2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.texinfo (Auto-loading extensions): Add additional cross
index f18b1c152241bbb5c9040acd92990b93253189ba..3e3c38dea3afacbc230ea5d612c80fe0fb888e70 100644 (file)
@@ -25788,6 +25788,18 @@ Control the styling of addresses.  These are managed with the
 @code{set style address} family of commands.  By default, this style's
 foreground color is blue.
 
+@item version
+Control the styling of @value{GDBN}'s version number text.  By
+default, this style's foreground color is magenta and it has bold
+intensity.  The version number is displayed in two places, the output
+of @command{show version}, and when @value{GDBN} starts up.
+
+Currently the version string displayed at startup is printed before
+@value{GDBN} has parsed any command line options, or parsed any
+command files, so there is currently no way to control the styling of
+this string.  However, @value{GDBN}'s @code{--quiet} command line option
+can be used to disable printing of the version string on startup.
+
 @item title
 Control the styling of titles.  These are managed with the
 @code{set style title} family of commands.  By default, this style's
index 6537bba41b3c86e6ee1f7685aed5e42b5cef8529..d6fa7402aa82c0bff5f74ee608d647d7e2b662ce 100644 (file)
@@ -1,3 +1,10 @@
+2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       PR cli/25956
+       * gdb.base/style.exp (run_style_tests): Add version string test.
+       (test_startup_version_string): Use version style name.
+       * lib/gdb-utils.exp (style): Handle version style name.
+
 2021-01-22  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.base/style.exp (limited_style): New proc.
index 08cd63546bd3f7df54c4dfd078717cae5078c229..0754c9daa49d799dfcfdae88563a9fde34c6a547 100644 (file)
@@ -270,6 +270,12 @@ proc run_style_tests { } {
        gdb_test "p 5" \
            "Warning: '[limited_style p title]', an alias for the command '[limited_style print title]', is deprecated.*Use '[limited_style new_p title]'.*" \
            "p deprecated warning, with replacement"
+
+       # Check that the version string is styled in the output of 'show
+       # version', and that this styling can be disabled.
+       set vers [style "GNU gdb.*" version]
+       gdb_test "show version" "${vers}.*" \
+           "version is styled in 'show version'"
     }
 }
 
@@ -282,7 +288,7 @@ proc test_startup_version_string { } {
 
     # Deliberate use of base STYLE proc here as the style of the
     # startup version string can't (currently) be controlled.
-    set vers [style "GNU gdb.*" "35;1"]
+    set vers [style "GNU gdb.*" version]
     gdb_test "" "${vers}.*" "version is styled at startup"
 }
 
index 000e3800cd90d9dc7b8295c583842b5a697a0f6a..ad7d2884aae96c534ff54fc0b8bffb37aba865e8 100644 (file)
@@ -55,6 +55,7 @@ proc style {str style} {
        variable { set style 36 }
        address { set style 34 }
        metadata { set style 2 }
+       version { set style "35;1" }
     }
     return "\033\\\[${style}m${str}\033\\\[m"
 }
index 15fbd6d27e68b4244737a1df0be333378f63298a..08c4742251467380a2120943adc0dc413eaa7f57 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1391,14 +1391,9 @@ print_gdb_version (struct ui_file *stream, bool interactive)
      program to parse, and is just canonical program name and version
      number, which starts after last space.  */
 
-  ui_file_style style;
-  if (interactive)
-    {
-      ui_file_style nstyle = { ui_file_style::MAGENTA, ui_file_style::NONE,
-                              ui_file_style::BOLD };
-      style = nstyle;
-    }
-  fprintf_styled (stream, style, "GNU gdb %s%s\n", PKGVERSION, version);
+  std::string v_str = string_printf ("GNU gdb %s%s", PKGVERSION, version);
+  fprintf_filtered (stream, "%ps\n",
+                   styled_string (version_style.style (), v_str.c_str ()));
 
   /* Second line is a copyright notice.  */