aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog25
-rw-r--r--gdb/NEWS8
-rw-r--r--gdb/cli/cli-style.c81
-rw-r--r--gdb/cli/cli-style.h17
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdb.texinfo14
-rw-r--r--gdb/tui/tui-io.c8
-rw-r--r--gdb/tui/tui-io.h3
-rw-r--r--gdb/tui/tui-win.c4
-rw-r--r--gdb/tui/tui-wingeneral.c8
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"
diff --git a/gdb/NEWS b/gdb/NEWS
index 56d4a34..0a04146 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -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 ());
}