diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 29b525ae38..18a2dbb801 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2019-01-12 Philippe Waroquiers + + * cli/cli-style.h (class cli_style_option): + Remove arg prefixname, add do_set and do_show. + Add member functions set_list and show_list. + * cli/cli-style.c (class cli_style_option): Update accordingly. + (style_set_list): Move to file scope. + (style_show_list): Likewise. + (set_style): Call help_list. + (show_style): Call cmd_show_list. + (_initialize_cli_style): New macro STYLE_ADD_SETSHOW_COMMANDS. + Update to use the new macro. + 2019-10-12 Joel Brobecker * ada-lang.c (_initialize_ada_language): Expand the help text diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c index d9cb94d6bb..234cc410dd 100644 --- a/gdb/cli/cli-style.c +++ b/gdb/cli/cli-style.c @@ -114,20 +114,6 @@ cli_style_option::style () const /* See cli-style.h. */ -void -cli_style_option::do_set (const char *args, int from_tty) -{ -} - -/* See cli-style.h. */ - -void -cli_style_option::do_show (const char *args, int from_tty) -{ -} - -/* See cli-style.h. */ - void cli_style_option::do_show_foreground (struct ui_file *file, int from_tty, struct cmd_list_element *cmd, @@ -168,12 +154,15 @@ void cli_style_option::add_setshow_commands (const char *name, enum command_class theclass, const char *prefix_doc, - const char *prefixname, struct cmd_list_element **set_list, - struct cmd_list_element **show_list) + void (*do_set) (const char *args, + int from_tty), + struct cmd_list_element **show_list, + void (*do_show) (const char *args, + int from_tty)) { - m_set_prefix = std::string ("set ") + prefixname + " "; - m_show_prefix = std::string ("show ") + prefixname + " "; + m_set_prefix = std::string ("set style ") + name + " "; + m_show_prefix = std::string ("show style ") + name + " "; add_prefix_cmd (name, no_class, do_set, prefix_doc, &m_set_list, m_set_prefix.c_str (), 0, set_list); @@ -198,23 +187,29 @@ cli_style_option::add_setshow_commands (const char *name, &m_set_list, &m_show_list, (void *) name); add_setshow_enum_cmd ("intensity", theclass, cli_intensities, &m_intensity, - _("Set the display intensity color for this property"), - _("\ -Show the display intensity color for this property"), + _("Set the display intensity for this property"), + _("Show the display intensity for this property"), nullptr, nullptr, do_show_intensity, &m_set_list, &m_show_list, (void *) name); } +static cmd_list_element *style_set_list; +static cmd_list_element *style_show_list; + static void set_style (const char *arg, int from_tty) { + printf_unfiltered (_("\"set style\" must be followed " + "by an appropriate subcommand.\n")); + help_list (style_set_list, "set style ", all_commands, gdb_stdout); } static void show_style (const char *arg, int from_tty) { + cmd_show_list (style_show_list, from_tty, ""); } static void @@ -236,9 +231,6 @@ show_style_enabled (struct ui_file *file, int from_tty, void _initialize_cli_style () { - static cmd_list_element *style_set_list; - static cmd_list_element *style_show_list; - add_prefix_cmd ("style", no_class, set_style, _("\ Style-specific settings\n\ Configure various style-related variables, such as colors"), @@ -255,32 +247,43 @@ If enabled, output to the terminal is styled."), set_style_enabled, show_style_enabled, &style_set_list, &style_show_list); - file_name_style.add_setshow_commands ("filename", no_class, - _("\ +#define STYLE_ADD_SETSHOW_COMMANDS(STYLE, NAME, PREFIX_DOC) \ + STYLE.add_setshow_commands (NAME, no_class, PREFIX_DOC, \ + &style_set_list, \ + [] (const char *args, int from_tty) \ + { \ + help_list \ + (STYLE.set_list (), \ + "set style " NAME " ", \ + all_commands, \ + gdb_stdout); \ + }, \ + &style_show_list, \ + [] (const char *args, int from_tty) \ + { \ + cmd_show_list \ + (STYLE.show_list (), \ + from_tty, \ + ""); \ + }) + + STYLE_ADD_SETSHOW_COMMANDS (file_name_style, "filename", + _("\ Filename display styling\n\ -Configure filename colors and display intensity."), - "style filename", - &style_set_list, - &style_show_list); - function_name_style.add_setshow_commands ("function", no_class, - _("\ +Configure filename colors and display intensity.")); + + STYLE_ADD_SETSHOW_COMMANDS (function_name_style, "function", + _("\ Function name display styling\n\ -Configure function name colors and display intensity"), - "style function", - &style_set_list, - &style_show_list); - variable_name_style.add_setshow_commands ("variable", no_class, - _("\ +Configure function name colors and display intensity")); + + STYLE_ADD_SETSHOW_COMMANDS (variable_name_style, "variable", + _("\ Variable name display styling\n\ -Configure variable name colors and display intensity"), - "style variable", - &style_set_list, - &style_show_list); - address_style.add_setshow_commands ("address", no_class, - _("\ +Configure variable name colors and display intensity")); + + STYLE_ADD_SETSHOW_COMMANDS (address_style, "address", + _("\ Address display styling\n\ -Configure address colors and display intensity"), - "style address", - &style_set_list, - &style_show_list); +Configure address colors and display intensity")); } diff --git a/gdb/cli/cli-style.h b/gdb/cli/cli-style.h index 85df034389..07830f9dfd 100644 --- a/gdb/cli/cli-style.h +++ b/gdb/cli/cli-style.h @@ -38,9 +38,17 @@ public: void add_setshow_commands (const char *name, enum command_class theclass, const char *prefix_doc, - const char *prefixname, struct cmd_list_element **set_list, - struct cmd_list_element **show_list); + void (*do_set) (const char *args, int from_tty), + struct cmd_list_element **show_list, + void (*do_show) (const char *args, int from_tty)); + + /* Return the 'set style NAME' command list, that can be used + to build a lambda DO_SET to call add_setshow_commands. */ + struct cmd_list_element *set_list () { return m_set_list; }; + + /* Same as SET_LIST but for the show command list. */ + struct cmd_list_element *show_list () { return m_show_list; }; private: @@ -59,10 +67,6 @@ private: struct cmd_list_element *m_set_list = nullptr; struct cmd_list_element *m_show_list = nullptr; - /* Callback to set a value. */ - static void do_set (const char *args, int from_tty); - /* Callback to show a value. */ - static void do_show (const char *args, int from_tty); /* Callback to show the foreground. */ static void do_show_foreground (struct ui_file *file, int from_tty, struct cmd_list_element *cmd,