diff options
-rw-r--r-- | gdb/ChangeLog | 25 | ||||
-rw-r--r-- | gdb/NEWS | 8 | ||||
-rw-r--r-- | gdb/cli/cli-style.c | 81 | ||||
-rw-r--r-- | gdb/cli/cli-style.h | 17 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 14 | ||||
-rw-r--r-- | gdb/tui/tui-io.c | 8 | ||||
-rw-r--r-- | gdb/tui/tui-io.h | 3 | ||||
-rw-r--r-- | gdb/tui/tui-win.c | 4 | ||||
-rw-r--r-- | gdb/tui/tui-wingeneral.c | 8 |
10 files changed, 146 insertions, 27 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 15f3e6c..86fa840 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,30 @@ 2019-12-01 Tom Tromey <tom@tromey.com> + * NEWS: Document new settings. + * tui/tui-wingeneral.c (box_win): Apply appropriate border style. + * tui/tui-win.c (_initialize_tui_win): Add border style + observers. + * tui/tui-io.h (tui_apply_style): Declare. + * tui/tui-io.c (tui_apply_style): Rename from apply_style. No + longer static. + (apply_ansi_escape, tui_set_reverse_mode): Update. + * cli/cli-style.h (class cli_style_option) <add_setshow_commands>: + Add "skip_intensity" parameter. + <changed>: New member. + <do_set_value>: Declare. + (tui_border_style, tui_active_border_style): Declare. + * cli/cli-style.c (tui_border_style, tui_active_border_style): New + globals. + (cli_style_option): Initialize "changed". + (cli_style_option::do_set_value): New function. + (cli_style_option::add_setshow_commands): Add "skip_intensity" + parameter. Update. + (STYLE_ADD_SETSHOW_COMMANDS): Add "SKIP" parameter. + (_initialize_cli_style): Update. Create TUI border style + commands. + +2019-12-01 Tom Tromey <tom@tromey.com> + * tui/tui-winsource.h (tui_copy_source_line): Add "ndigits" parameter. * tui/tui-winsource.c (tui_copy_source_line): Add "ndigits" @@ -169,6 +169,14 @@ maint show worker-threads reasonable. Currently worker threads are only used when demangling the names of linker symbols. +set style tui-border foreground COLOR +set style tui-border background COLOR + Control the styling of TUI borders. + +set style tui-active-border foreground COLOR +set style tui-active-border background COLOR + Control the styling of the active TUI border. + maint set test-settings KIND maint show test-settings KIND A set of commands used by the testsuite for exercising the settings diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c index 5535d67..5955d93 100644 --- a/gdb/cli/cli-style.c +++ b/gdb/cli/cli-style.c @@ -85,13 +85,23 @@ cli_style_option title_style ("title", ui_file_style::BOLD); /* See cli-style.h. */ +cli_style_option tui_border_style ("tui-border", ui_file_style::CYAN); + +/* See cli-style.h. */ + +cli_style_option tui_active_border_style ("tui-active-border", + ui_file_style::CYAN); + +/* See cli-style.h. */ + cli_style_option metadata_style ("metadata", ui_file_style::DIM); /* See cli-style.h. */ cli_style_option::cli_style_option (const char *name, ui_file_style::basic_color fg) - : m_name (name), + : 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]) @@ -102,7 +112,8 @@ cli_style_option::cli_style_option (const char *name, cli_style_option::cli_style_option (const char *name, ui_file_style::intensity i) - : m_name (name), + : changed (name), + m_name (name), m_foreground (cli_colors[0]), m_background (cli_colors[0]), m_intensity (cli_intensities[i]) @@ -143,6 +154,16 @@ cli_style_option::style () const return ui_file_style (fg, bg, intensity); } +/* See cli-style.h. */ + +void +cli_style_option::do_set_value (const char *ignore, int from_tty, + struct cmd_list_element *cmd) +{ + cli_style_option *cso = (cli_style_option *) get_cmd_context (cmd); + cso->changed.notify (); +} + /* Implements the cli_style_option::do_show_* functions. WHAT and VALUE are the property and value to show. The style for which WHAT is shown is retrieved from CMD context. */ @@ -198,7 +219,8 @@ cli_style_option::add_setshow_commands (enum command_class theclass, int from_tty), struct cmd_list_element **show_list, void (*do_show) (const char *args, - int from_tty)) + int from_tty), + bool skip_intensity) { m_set_prefix = std::string ("set style ") + m_name + " "; m_show_prefix = std::string ("show style ") + m_name + " "; @@ -213,7 +235,7 @@ cli_style_option::add_setshow_commands (enum command_class theclass, _("Set the foreground color for this property."), _("Show the foreground color for this property."), nullptr, - nullptr, + do_set_value, do_show_foreground, &m_set_list, &m_show_list, (void *) this); add_setshow_enum_cmd ("background", theclass, cli_colors, @@ -221,17 +243,18 @@ cli_style_option::add_setshow_commands (enum command_class theclass, _("Set the background color for this property."), _("Show the background color for this property."), nullptr, - nullptr, + do_set_value, do_show_background, &m_set_list, &m_show_list, (void *) this); - add_setshow_enum_cmd ("intensity", theclass, cli_intensities, - &m_intensity, - _("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 *) this); + if (!skip_intensity) + add_setshow_enum_cmd ("intensity", theclass, cli_intensities, + &m_intensity, + _("Set the display intensity for this property."), + _("Show the display intensity for this property."), + nullptr, + do_set_value, + do_show_intensity, + &m_set_list, &m_show_list, (void *) this); } static cmd_list_element *style_set_list; @@ -323,7 +346,7 @@ it was not linked against GNU Source Highlight." ), set_style_enabled, show_style_sources, &style_set_list, &style_show_list); -#define STYLE_ADD_SETSHOW_COMMANDS(STYLE, PREFIX_DOC) \ +#define STYLE_ADD_SETSHOW_COMMANDS(STYLE, PREFIX_DOC, SKIP) \ STYLE.add_setshow_commands (no_class, PREFIX_DOC, \ &style_set_list, \ [] (const char *args, int from_tty) \ @@ -341,46 +364,60 @@ it was not linked against GNU Source Highlight." (STYLE.show_list (), \ from_tty, \ ""); \ - }) + }, SKIP) STYLE_ADD_SETSHOW_COMMANDS (file_name_style, _("\ Filename display styling.\n\ -Configure filename colors and display intensity.")); +Configure filename colors and display intensity."), false); STYLE_ADD_SETSHOW_COMMANDS (function_name_style, _("\ Function name display styling.\n\ -Configure function name colors and display intensity")); +Configure function name colors and display intensity"), false); STYLE_ADD_SETSHOW_COMMANDS (variable_name_style, _("\ Variable name display styling.\n\ -Configure variable name colors and display intensity")); +Configure variable name colors and display intensity"), false); STYLE_ADD_SETSHOW_COMMANDS (address_style, _("\ Address display styling.\n\ -Configure address colors and display intensity")); +Configure address colors and display intensity"), false); STYLE_ADD_SETSHOW_COMMANDS (title_style, _("\ Title display styling.\n\ Configure title colors and display intensity\n\ Some commands (such as \"apropos -v REGEXP\") use the title style to improve\n\ -readability.")); +readability."), false); STYLE_ADD_SETSHOW_COMMANDS (highlight_style, _("\ Highlight display styling.\n\ Configure highlight colors and display intensity\n\ Some commands use the highlight style to draw the attention to a part\n\ -of their output.")); +of their output."), false); STYLE_ADD_SETSHOW_COMMANDS (metadata_style, _("\ Metadata display styling.\n\ Configure metadata colors and display intensity\n\ The \"metadata\" style is used when GDB displays information about\n\ -your data, for example \"<unavailable>\"")); +your data, for example \"<unavailable>\""), false); + + STYLE_ADD_SETSHOW_COMMANDS (tui_border_style, + _("\ +TUI border display styling.\n\ +Configure TUI border colors\n\ +The \"tui-border\" style is used when GDB displays the border of a\n\ +TUI window that does not have the focus."), true); + + STYLE_ADD_SETSHOW_COMMANDS (tui_active_border_style, + _("\ +TUI active border display styling.\n\ +Configure TUI active border colors\n\ +The \"tui-active-border\" style is used when GDB displays the border of a\n\ +TUI window that does have the focus."), true); } diff --git a/gdb/cli/cli-style.h b/gdb/cli/cli-style.h index 44eb6cb..12140bc 100644 --- a/gdb/cli/cli-style.h +++ b/gdb/cli/cli-style.h @@ -22,6 +22,7 @@ #include "ui-file.h" #include "command.h" +#include "gdbsupport/observable.h" /* A single CLI style option. */ class cli_style_option @@ -47,7 +48,8 @@ public: struct cmd_list_element **set_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)); + void (*do_show) (const char *args, int from_tty), + bool skip_intensity); /* Return the 'set style NAME' command list, that can be used to build a lambda DO_SET to call add_setshow_commands. */ @@ -56,6 +58,9 @@ public: /* Same as SET_LIST but for the show command list. */ struct cmd_list_element *show_list () { return m_show_list; }; + /* This style can be observed for any changes. */ + gdb::observers::observable<> changed; + private: /* The style name. */ @@ -76,6 +81,10 @@ private: struct cmd_list_element *m_set_list = nullptr; struct cmd_list_element *m_show_list = nullptr; + /* Callback to notify the observable. */ + static void do_set_value (const char *ignore, int from_tty, + struct cmd_list_element *cmd); + /* Callback to show the foreground. */ static void do_show_foreground (struct ui_file *file, int from_tty, struct cmd_list_element *cmd, @@ -111,6 +120,12 @@ extern cli_style_option title_style; /* The metadata style. */ extern cli_style_option metadata_style; +/* The border style of a TUI window that does not have the focus. */ +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; + /* True if source styling is enabled. */ extern bool source_styling; diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 8028f78..6b6f28e 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,5 +1,10 @@ 2019-12-01 Tom Tromey <tom@tromey.com> + * gdb.texinfo (TUI Configuration): Mention TUI border styles. + (Output Styling): Document new settings. + +2019-12-01 Tom Tromey <tom@tromey.com> + * gdb.texinfo (TUI Configuration): Document new setting. 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 9b5297e..198862a 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -25449,6 +25449,17 @@ the user attention to some specific parts of their output. For example, the command @command{apropos -v REGEXP} uses the highlight style to mark the documentation parts matching @var{regexp}. +@item tui-border +Control the styling of the TUI border. Note that, unlike other +styling options, only the color of the border can be controlled via +@code{set style}. This was done for compatibility reasons, as TUI +controls to set the border's intensity predated the addition of +general styling to @value{GDBN}. @xref{TUI Configuration}. + +@item tui-active-border +Control the styling of the active TUI border; that is, the TUI window +that has the focus. + @end table @node Numbers @@ -28027,6 +28038,9 @@ much space as is needed for the line numbers in the current file, and only a single space to separate the line numbers from the source. @end table +Note that the colors of the TUI borders can be controlled using the +appropriate @code{set style} commands. @xref{Output Styling}. + @node Emacs @chapter Using @value{GDBN} under @sc{gnu} Emacs diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index 964f2e3..2eef288 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -306,8 +306,8 @@ get_color_pair (int fg, int bg) /* Apply STYLE to W. */ -static void -apply_style (WINDOW *w, ui_file_style style) +void +tui_apply_style (WINDOW *w, ui_file_style style) { /* Reset. */ wattron (w, A_NORMAL); @@ -413,7 +413,7 @@ apply_ansi_escape (WINDOW *w, const char *buf) style.set_reverse (true); } - apply_style (w, style); + tui_apply_style (w, style); return n_read; } @@ -438,7 +438,7 @@ tui_set_reverse_mode (WINDOW *w, bool reverse) style.set_fg (reverse_save_fg); } - apply_style (w, style); + tui_apply_style (w, style); } /* Print LENGTH characters from the buffer pointed to by BUF to the diff --git a/gdb/tui/tui-io.h b/gdb/tui/tui-io.h index ec23787..01bfe45 100644 --- a/gdb/tui/tui-io.h +++ b/gdb/tui/tui-io.h @@ -51,6 +51,9 @@ extern gdb::unique_xmalloc_ptr<char> tui_expand_tabs (const char *); /* Enter/leave reverse video mode. */ extern void tui_set_reverse_mode (WINDOW *w, bool reverse); +/* Apply STYLE to the window. */ +extern void tui_apply_style (WINDOW *w, ui_file_style style); + extern struct ui_out *tui_out; extern cli_ui_out *tui_old_uiout; diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index 576f9a5..b6204be 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -30,6 +30,7 @@ #include "breakpoint.h" #include "frame.h" #include "cli/cli-cmds.h" +#include "cli/cli-style.h" #include "top.h" #include "source.h" #include "event-loop.h" @@ -1517,4 +1518,7 @@ in a compact form. The compact form puts the source closer to\n\ the line numbers and uses less horizontal space."), tui_set_compact_source, tui_show_compact_source, &tui_setlist, &tui_showlist); + + tui_border_style.changed.attach (tui_rehighlight_all); + tui_active_border_style.changed.attach (tui_rehighlight_all); } diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c index f6a6903..b92f203 100644 --- a/gdb/tui/tui-wingeneral.c +++ b/gdb/tui/tui-wingeneral.c @@ -22,9 +22,11 @@ #include "defs.h" #include "tui/tui.h" #include "tui/tui-data.h" +#include "tui/tui-io.h" #include "tui/tui-wingeneral.h" #include "tui/tui-win.h" #include "tui/tui-stack.h" +#include "cli/cli-style.h" #include "gdb_curses.h" @@ -51,6 +53,11 @@ box_win (struct tui_win_info *win_info, else attrs = tui_border_attrs; + /* tui_apply_style resets the style entirely, so be sure to call it + before applying ATTRS. */ + tui_apply_style (win, (highlight_flag + ? tui_active_border_style.style () + : tui_border_style.style ())); wattron (win, attrs); #ifdef HAVE_WBORDER wborder (win, tui_border_vline, tui_border_vline, @@ -77,6 +84,7 @@ box_win (struct tui_win_info *win_info, } } wattroff (win, attrs); + tui_apply_style (win, ui_file_style ()); } |