mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
8a522c6cab
'thread|frame apply CMD' launches CMD so that CMD output goes to a string_file. This patch ensures that string_file for such CMD output contains style escape sequences that 'thread|frame apply' will later on output on the real terminal, so as to have CMD output properly styled. The idea is to have the class ui_file having overridable methods to indicate that the output to this ui_file should be done using 'terminal' behaviour such as styling. Then these methods are overriden in string_file so that a specially constructed string_file will get output with style escape sequences. After this patch, the output of CMD by thread|frame apply CMD is styled similarly as when CMD is launched directly. Note that string_file (term_out true) could also support wrapping, but this is not done (yet?). Tested on debian/amd64. gdb/ChangeLog 2019-04-27 Philippe Waroquiers <philippe.waroquiers@skynet.be> Support style in 'frame|thread apply' * gdbcmd.h (execute_command_to_string): New term_out parameter. * record.c (record_start, record_stop): Update callers of execute_command_to_string with false. * ui-file.h (class ui_file): New term_out and can_emit_style_escape methods. (class string_file): New constructor with term_out parameter. Override methods term_out and can_emit_style_escape. New member term_out. (class stdio_file): Override can_emit_style_escape. (class tee_file): Override term_out and can_emit_style_escape. * utils.h (can_emit_style_escape): Remove. * utils.c (can_emit_style_escape): Likewise. Update all callers of can_emit_style_escape (SOMESTREAM) to SOMESTREAM->can_emit_style_escape. * source-cache.c (source_cache::get_source_lines): Likewise. * stack.c (frame_apply_command_count): Call execute_command_to_string passing the term_out characteristic of the current gdb_stdout. * thread.c (thr_try_catch_cmd): Likewise. * top.c (execute_command_to_string): pass term_out parameter to construct the string_file for the command output. * ui-file.c (term_cli_styling): New function (most code moved from utils.c can_emit_style_escape). (string_file::string_file, string_file::can_emit_style_escape, stdio_file::can_emit_style_escape, tee_file::term_out, tee_file::can_emit_style_escape): New functions.
149 lines
4.4 KiB
C++
149 lines
4.4 KiB
C++
/* ***DEPRECATED*** The gdblib files must not be calling/using things in any
|
|
of the possible command languages. If necessary, a hook (that may be
|
|
present or not) must be used and set to the appropriate routine by any
|
|
command language that cares about it. If you are having to include this
|
|
file you are possibly doing things the old way. This file will disapear.
|
|
fnasser@redhat.com */
|
|
|
|
/* Header file for GDB-specific command-line stuff.
|
|
Copyright (C) 1986-2019 Free Software Foundation, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#if !defined (GDBCMD_H)
|
|
#define GDBCMD_H 1
|
|
|
|
#include "command.h"
|
|
#include "ui-out.h"
|
|
#include "cli/cli-script.h"
|
|
|
|
/* Chain containing all defined commands. */
|
|
|
|
extern struct cmd_list_element *cmdlist;
|
|
|
|
/* Chain containing all defined info subcommands. */
|
|
|
|
extern struct cmd_list_element *infolist;
|
|
|
|
/* Chain containing all defined enable subcommands. */
|
|
|
|
extern struct cmd_list_element *enablelist;
|
|
|
|
/* Chain containing all defined disable subcommands. */
|
|
|
|
extern struct cmd_list_element *disablelist;
|
|
|
|
/* Chain containing all defined delete subcommands. */
|
|
|
|
extern struct cmd_list_element *deletelist;
|
|
|
|
/* Chain containing all defined detach subcommands. */
|
|
|
|
extern struct cmd_list_element *detachlist;
|
|
|
|
/* Chain containing all defined kill subcommands. */
|
|
|
|
extern struct cmd_list_element *killlist;
|
|
|
|
/* Chain containing all defined stop subcommands. */
|
|
|
|
extern struct cmd_list_element *stoplist;
|
|
|
|
/* Chain containing all defined set subcommands. */
|
|
|
|
extern struct cmd_list_element *setlist;
|
|
|
|
/* Chain containing all defined unset subcommands. */
|
|
|
|
extern struct cmd_list_element *unsetlist;
|
|
|
|
/* Chain containing all defined show subcommands. */
|
|
|
|
extern struct cmd_list_element *showlist;
|
|
|
|
/* Chain containing all defined \"set history\". */
|
|
|
|
extern struct cmd_list_element *sethistlist;
|
|
|
|
/* Chain containing all defined \"show history\". */
|
|
|
|
extern struct cmd_list_element *showhistlist;
|
|
|
|
/* Chain containing all defined \"unset history\". */
|
|
|
|
extern struct cmd_list_element *unsethistlist;
|
|
|
|
/* Chain containing all defined maintenance subcommands. */
|
|
|
|
extern struct cmd_list_element *maintenancelist;
|
|
|
|
/* Chain containing all defined "maintenance info" subcommands. */
|
|
|
|
extern struct cmd_list_element *maintenanceinfolist;
|
|
|
|
/* Chain containing all defined "maintenance print" subcommands. */
|
|
|
|
extern struct cmd_list_element *maintenanceprintlist;
|
|
|
|
/* Chain containing all defined "maintenance check" subcommands. */
|
|
|
|
extern struct cmd_list_element *maintenancechecklist;
|
|
|
|
/* Chain containing all defined "maintenance set" subcommands. */
|
|
|
|
extern struct cmd_list_element *maintenance_set_cmdlist;
|
|
|
|
/* Chain containing all defined "maintenance show" subcommands. */
|
|
|
|
extern struct cmd_list_element *maintenance_show_cmdlist;
|
|
|
|
extern struct cmd_list_element *setprintlist;
|
|
|
|
extern struct cmd_list_element *showprintlist;
|
|
|
|
extern struct cmd_list_element *setprintrawlist;
|
|
|
|
extern struct cmd_list_element *showprintrawlist;
|
|
|
|
extern struct cmd_list_element *setprinttypelist;
|
|
|
|
extern struct cmd_list_element *showprinttypelist;
|
|
|
|
extern struct cmd_list_element *setdebuglist;
|
|
|
|
extern struct cmd_list_element *showdebuglist;
|
|
|
|
extern struct cmd_list_element *setchecklist;
|
|
|
|
extern struct cmd_list_element *showchecklist;
|
|
|
|
/* Chain containing all defined "save" subcommands. */
|
|
|
|
extern struct cmd_list_element *save_cmdlist;
|
|
|
|
extern void execute_command (const char *, int);
|
|
|
|
/* Execute command P and returns its output. If TERM_OUT,
|
|
the output is built using terminal output behaviour such
|
|
as cli_styling. */
|
|
extern std::string execute_command_to_string (const char *p, int from_tty,
|
|
bool term_out);
|
|
|
|
extern void print_command_line (struct command_line *, unsigned int,
|
|
struct ui_file *);
|
|
extern void print_command_lines (struct ui_out *,
|
|
struct command_line *, unsigned int);
|
|
|
|
#endif /* !defined (GDBCMD_H) */
|