+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"
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
/* 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])
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])
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. */
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 + " ";
_("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,
_("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;
), 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) \
(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);
}
#include "ui-file.h"
#include "command.h"
+#include "gdbsupport/observable.h"
/* A single CLI style option. */
class cli_style_option
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. */
/* 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. */
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,
/* 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;
+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.
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
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
/* 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);
style.set_reverse (true);
}
- apply_style (w, style);
+ tui_apply_style (w, style);
return n_read;
}
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
/* 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;
#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"
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);
}
#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"
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,
}
}
wattroff (win, attrs);
+ tui_apply_style (win, ui_file_style ());
}