Reset terminal styles
This adds a function that can be used to reset terminal styles, regardless of what style the low-level output routines currently think is applied. This is used to make "echo" and "printf" work properly when emitting ANSI terminal escapes -- now gdb will reset the style at the end of the command. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * utils.h (reset_terminal_style): Declare. * utils.c (can_emit_style_escape): New function. (set_output_style): Use it. (reset_terminal_style): New function. * printcmd.c (printf_command): Call reset_terminal_style. * cli/cli-cmds.c (echo_command): Call reset_terminal_style.
This commit is contained in:
parent
cbe5657196
commit
ef1dfa3644
5 changed files with 49 additions and 7 deletions
|
@ -1,3 +1,12 @@
|
|||
2018-12-28 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* utils.h (reset_terminal_style): Declare.
|
||||
* utils.c (can_emit_style_escape): New function.
|
||||
(set_output_style): Use it.
|
||||
(reset_terminal_style): New function.
|
||||
* printcmd.c (printf_command): Call reset_terminal_style.
|
||||
* cli/cli-cmds.c (echo_command): Call reset_terminal_style.
|
||||
|
||||
2018-12-28 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* utils.h (set_output_style, fprintf_styled)
|
||||
|
|
|
@ -689,6 +689,8 @@ echo_command (const char *text, int from_tty)
|
|||
printf_filtered ("%c", c);
|
||||
}
|
||||
|
||||
reset_terminal_style (gdb_stdout);
|
||||
|
||||
/* Force this output to appear now. */
|
||||
wrap_here ("");
|
||||
gdb_flush (gdb_stdout);
|
||||
|
|
|
@ -2609,6 +2609,8 @@ static void
|
|||
printf_command (const char *arg, int from_tty)
|
||||
{
|
||||
ui_printf (arg, gdb_stdout);
|
||||
reset_terminal_style (gdb_stdout);
|
||||
wrap_here ("");
|
||||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
|
||||
|
|
39
gdb/utils.c
39
gdb/utils.c
|
@ -1444,25 +1444,50 @@ emit_style_escape (const ui_file_style &style)
|
|||
wrap_buffer.append (style.to_ansi ());
|
||||
}
|
||||
|
||||
/* Return true if ANSI escapes can be used on STREAM. */
|
||||
|
||||
static bool
|
||||
can_emit_style_escape (struct ui_file *stream)
|
||||
{
|
||||
if (stream != gdb_stdout
|
||||
|| !cli_styling
|
||||
|| !ui_file_isatty (stream))
|
||||
return false;
|
||||
const char *term = getenv ("TERM");
|
||||
if (term == nullptr || !strcmp (term, "dumb"))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Set the current output style. This will affect future uses of the
|
||||
_filtered output functions. */
|
||||
|
||||
static void
|
||||
set_output_style (struct ui_file *stream, const ui_file_style &style)
|
||||
{
|
||||
if (stream != gdb_stdout
|
||||
|| !cli_styling
|
||||
|| style == desired_style
|
||||
|| !ui_file_isatty (stream))
|
||||
return;
|
||||
const char *term = getenv ("TERM");
|
||||
if (term == nullptr || !strcmp (term, "dumb"))
|
||||
if (!can_emit_style_escape (stream)
|
||||
|| style == desired_style)
|
||||
return;
|
||||
|
||||
desired_style = style;
|
||||
emit_style_escape (style);
|
||||
}
|
||||
|
||||
/* See utils.h. */
|
||||
|
||||
void
|
||||
reset_terminal_style (struct ui_file *stream)
|
||||
{
|
||||
if (can_emit_style_escape (stream))
|
||||
{
|
||||
/* Force the setting, regardless of what we think the setting
|
||||
might already be. */
|
||||
desired_style = ui_file_style ();
|
||||
applied_style = desired_style;
|
||||
wrap_buffer.append (desired_style.to_ansi ());
|
||||
}
|
||||
}
|
||||
|
||||
/* Wait, so the user can read what's on the screen. Prompt the user
|
||||
to continue by pressing RETURN. 'q' is also provided because
|
||||
telling users what to do in the prompt is more user-friendly than
|
||||
|
|
|
@ -439,6 +439,10 @@ extern void fputs_styled (const char *linebuffer,
|
|||
const ui_file_style &style,
|
||||
struct ui_file *stream);
|
||||
|
||||
/* Reset the terminal style to the default, if needed. */
|
||||
|
||||
extern void reset_terminal_style (struct ui_file *stream);
|
||||
|
||||
/* Display the host ADDR on STREAM formatted as ``0x%x''. */
|
||||
extern void gdb_print_host_address_1 (const void *addr, struct ui_file *stream);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue