[PATCH 2/2] gdb: add new version style
Lancelot SIX
lsix@lancelotsix.com
Thu Jan 14 11:15:54 GMT 2021
Le Thu, Jan 14, 2021 at 09:56:43AM +0000, Andrew Burgess a écrit :
> 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.
>
> gdb/ChangeLog:
>
> * 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:
>
> * gdb.texinfo (Output Styling): Document version style.
>
> gdb/testsuite/ChangeLog:
>
> * 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 | 12 ++++++++++++
> gdb/NEWS | 5 +++++
> gdb/cli/cli-style.c | 17 +++++++++++++++--
> gdb/cli/cli-style.h | 6 +++++-
> gdb/doc/ChangeLog | 4 ++++
> gdb/doc/gdb.texinfo | 12 ++++++++++++
> gdb/testsuite/ChangeLog | 6 ++++++
> gdb/testsuite/gdb.base/style.exp | 8 +++++++-
> gdb/testsuite/lib/gdb-utils.exp | 1 +
> gdb/top.c | 11 +++--------
> 10 files changed, 70 insertions(+), 12 deletions(-)
>
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 66702862efb..0ba0c0b5ea2 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -171,6 +171,11 @@ show exec-file-mismatch -- Show exec-file-mismatch handling (ask|warn|off).
> executable file; if 'warn', just display a warning; if 'off', don't
> attempt to detect a mismatch.
>
> +set style version foreground COLOR
> +set style version background COLOR
> +set style version intensity VALUE
> + Control the styling of GDB's version number text.
> +
> tui new-layout NAME WINDOW WEIGHT [WINDOW WEIGHT]...
> Define a new TUI layout, specifying its name and the windows that
> will be displayed.
> diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c
> index cbedd30ea74..8b4b6b24cda 100644
> --- a/gdb/cli/cli-style.c
> +++ b/gdb/cli/cli-style.c
> @@ -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);
> }
> diff --git a/gdb/cli/cli-style.h b/gdb/cli/cli-style.h
> index cd51bf4aa94..187e1d07ce7 100644
> --- a/gdb/cli/cli-style.h
> +++ b/gdb/cli/cli-style.h
> @@ -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;
>
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 69fa6b709bf..37f97bfb2b2 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -25872,6 +25872,18 @@
> @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 placed, the output
s/placed/places/
> +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
> diff --git a/gdb/testsuite/gdb.base/style.exp b/gdb/testsuite/gdb.base/style.exp
> index 58c8da0a10e..dfbadd6c1af 100644
> --- a/gdb/testsuite/gdb.base/style.exp
> +++ b/gdb/testsuite/gdb.base/style.exp
> @@ -264,6 +264,12 @@ proc run_style_tests { } {
> gdb_test "p 5" \
> "Warning: '[style p title]', an alias for the command '[style print title]', is deprecated.*Use '[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'"
> }
> }
>
> @@ -274,7 +280,7 @@ proc test_startup_version_string { } {
> gdb_exit
> gdb_spawn
>
> - set vers [style "GNU gdb.*" "35;1"]
> + set vers [style "GNU gdb.*" version]
> gdb_test "" "${vers}.*" "version is styled at startup"
> }
>
> diff --git a/gdb/testsuite/lib/gdb-utils.exp b/gdb/testsuite/lib/gdb-utils.exp
> index 000e3800cd9..ad7d2884aae 100644
> --- a/gdb/testsuite/lib/gdb-utils.exp
> +++ b/gdb/testsuite/lib/gdb-utils.exp
> @@ -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"
> }
> diff --git a/gdb/top.c b/gdb/top.c
> index 2c13864e120..92090bccbf4 100644
> --- a/gdb/top.c
> +++ b/gdb/top.c
> @@ -1395,14 +1395,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. */
>
> --
> 2.25.4
>
It looks like this patch could be enough to closes the following ticket:
https://sourceware.org/bugzilla/show_bug.cgi?id=25956 (with the
limitation that this patch makes the version number configurable… after
it has been displayed ; but at least the style is not hard-coded anymore).
I tried to go through the remaining code and did not find other
hard-coded styles (but I might have missed some).
Lancelot.
More information about the Gdb-patches
mailing list