forked from Imagelibrary/binutils-gdb
Use emoji to indicate errors and warnings
This patch adds, at long last, some emoji output to gdb. In particular, warnings are indicated with the U+26A0 (WARNING SIGN), and errors with U+274C (CROSS MARK). There is a new setting to control whether emoji output can be used. It defaults to "auto", which means emoji will be used if the host charset is UTF-8. Note that disabling styling will also disable emoji, handy for traditionalists. I've refactored mingw console output a little, so that emoji will not be printed to the console. Note the previous code here was a bit strange in that it assumed that the first use of gdb_console_fputs would be to stdout. This version lets the user control the prefixes directly, so different emoji can be chosen if desired. Reviewed-By: Eli Zaretskii <eliz@gnu.org> Reviewed-By: Keith Seitz <keiths@redhat.com> Reviewed-By: Guinevere Larsen <guinevere@redhat.com>
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "cli/cli-style.h"
|
||||
#include "source-cache.h"
|
||||
#include "observable.h"
|
||||
#include "charset.h"
|
||||
|
||||
/* True if styling is enabled. */
|
||||
|
||||
@@ -42,6 +43,10 @@ bool source_styling = true;
|
||||
|
||||
bool disassembler_styling = true;
|
||||
|
||||
/* User-settable variable controlling emoji output. */
|
||||
|
||||
static auto_boolean emoji_styling = AUTO_BOOLEAN_AUTO;
|
||||
|
||||
/* Names of intensities; must correspond to
|
||||
ui_file_style::intensity. */
|
||||
static const char * const cli_intensities[] = {
|
||||
@@ -410,6 +415,85 @@ show_style_disassembler (struct ui_file *file, int from_tty,
|
||||
gdb_printf (file, _("Disassembler output styling is disabled.\n"));
|
||||
}
|
||||
|
||||
/* Implement 'show style emoji'. */
|
||||
|
||||
static void
|
||||
show_emoji_styling (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
{
|
||||
if (emoji_styling == AUTO_BOOLEAN_TRUE)
|
||||
gdb_printf (file, _("CLI emoji styling is enabled.\n"));
|
||||
else if (emoji_styling == AUTO_BOOLEAN_FALSE)
|
||||
gdb_printf (file, _("CLI emoji styling is disabled.\n"));
|
||||
else
|
||||
gdb_printf (file, _("CLI emoji styling is automatic (currently %s).\n"),
|
||||
emojis_ok () ? _("enabled") : _("disabled"));
|
||||
}
|
||||
|
||||
/* See cli-style.h. */
|
||||
|
||||
bool
|
||||
emojis_ok ()
|
||||
{
|
||||
if (!cli_styling || emoji_styling == AUTO_BOOLEAN_FALSE)
|
||||
return false;
|
||||
if (emoji_styling == AUTO_BOOLEAN_TRUE)
|
||||
return true;
|
||||
return strcmp (host_charset (), "UTF-8") == 0;
|
||||
}
|
||||
|
||||
/* See cli-style.h. */
|
||||
|
||||
void
|
||||
no_emojis ()
|
||||
{
|
||||
emoji_styling = AUTO_BOOLEAN_FALSE;
|
||||
}
|
||||
|
||||
/* Emoji warning prefix. */
|
||||
static std::string warning_prefix = "⚠️ ";
|
||||
|
||||
/* Implement 'show warning-prefix'. */
|
||||
|
||||
static void
|
||||
show_warning_prefix (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
{
|
||||
gdb_printf (file, _("Warning prefix is \"%s\".\n"),
|
||||
warning_prefix.c_str ());
|
||||
}
|
||||
|
||||
/* See cli-style.h. */
|
||||
|
||||
void
|
||||
print_warning_prefix (ui_file *file)
|
||||
{
|
||||
if (emojis_ok ())
|
||||
gdb_puts (warning_prefix.c_str (), file);
|
||||
}
|
||||
|
||||
/* Emoji error prefix. */
|
||||
static std::string error_prefix = "❌️ ";
|
||||
|
||||
/* Implement 'show error-prefix'. */
|
||||
|
||||
static void
|
||||
show_error_prefix (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
{
|
||||
gdb_printf (file, _("Error prefix is \"%s\".\n"),
|
||||
error_prefix.c_str ());
|
||||
}
|
||||
|
||||
/* See cli-style.h. */
|
||||
|
||||
void
|
||||
print_error_prefix (ui_file *file)
|
||||
{
|
||||
if (emojis_ok ())
|
||||
gdb_puts (error_prefix.c_str (), file);
|
||||
}
|
||||
|
||||
void _initialize_cli_style ();
|
||||
void
|
||||
_initialize_cli_style ()
|
||||
@@ -431,6 +515,13 @@ If enabled, output to the terminal is styled."),
|
||||
set_style_enabled, show_style_enabled,
|
||||
&style_set_list, &style_show_list);
|
||||
|
||||
add_setshow_auto_boolean_cmd ("emoji", no_class, &emoji_styling, _("\
|
||||
Set whether emoji output is enabled."), _("\
|
||||
Show whether emoji output is enabled."), _("\
|
||||
If enabled, emojis may be displayed."),
|
||||
nullptr, show_emoji_styling,
|
||||
&style_set_list, &style_show_list);
|
||||
|
||||
add_setshow_boolean_cmd ("sources", no_class, &source_styling, _("\
|
||||
Set whether source code styling is enabled."), _("\
|
||||
Show whether source code styling is enabled."), _("\
|
||||
@@ -627,4 +718,23 @@ coming from your source code."),
|
||||
&style_disasm_set_list);
|
||||
add_alias_cmd ("symbol", function_prefix_cmds.show, no_class, 0,
|
||||
&style_disasm_show_list);
|
||||
|
||||
add_setshow_string_cmd ("warning-prefix", no_class,
|
||||
&warning_prefix,
|
||||
_("Set the warning prefix text."),
|
||||
_("Show the warning prefix text."),
|
||||
_("\
|
||||
The warning prefix text is displayed before any warning, when\n\
|
||||
emoji output is enabled."),
|
||||
nullptr, show_warning_prefix,
|
||||
&style_set_list, &style_show_list);
|
||||
add_setshow_string_cmd ("error-prefix", no_class,
|
||||
&error_prefix,
|
||||
_("Set the error prefix text."),
|
||||
_("Show the error prefix text."),
|
||||
_("\
|
||||
The error prefix text is displayed before any error, when\n\
|
||||
emoji output is enabled."),
|
||||
nullptr, show_error_prefix,
|
||||
&style_set_list, &style_show_list);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user