diff options
author | Eli Zaretskii <eliz@gnu.org> | 2012-05-08 18:49:42 +0000 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2012-05-08 18:49:42 +0000 |
commit | c41535fdc41896a2e881e1386eb3be9dff6ca6c4 (patch) | |
tree | 27748eeb952799924a6f232d7d48398c331fc846 /gdb | |
parent | 80f5885c0674e3f865455e9e03ea60e67f1e4ed3 (diff) | |
download | gdb-c41535fdc41896a2e881e1386eb3be9dff6ca6c4.zip gdb-c41535fdc41896a2e881e1386eb3be9dff6ca6c4.tar.gz gdb-c41535fdc41896a2e881e1386eb3be9dff6ca6c4.tar.bz2 |
Display the ">" prompt in interactive mode while reading canned
commands, even when the current interpreter is MI.
interps.c (interp_set_temp): New function.
interps.h (interp_set_temp): Add prototype.
cli/cli-script.c (restore_interp): New cleanup function.
(read_command_lines): Temporarily override the current interpreter
with CLI and arrange for restoring the original one.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/cli/cli-script.c | 23 | ||||
-rw-r--r-- | gdb/interps.c | 12 | ||||
-rw-r--r-- | gdb/interps.h | 1 |
4 files changed, 47 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0a7266d..17039cb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2012-05-08 Eli Zaretskii <eliz@gnu.org> + + Display the ">" prompt in interactive mode while reading canned + commands, even when the current interpreter is MI. + + * interps.c (interp_set_temp): New function. + + * interps.h (interp_set_temp): Add prototype. + + * cli/cli-script.c (restore_interp): New cleanup function. + (read_command_lines): Temporarily override the current interpreter + with CLI and arrange for restoring the original one. + 2012-05-12 Joel Sherrill <joel.sherrill@oarcorp.com> * microblaze-rom.c (_initialize_picobug_rom): Add prototype. diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index cfa1c77..4b6c416 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -1178,6 +1178,12 @@ recurse_read_control_structure (char * (*read_next_line_func) (void), return ret; } +static void +restore_interp (void *arg) +{ + interp_set_temp (interp_name ((struct interp *)arg)); +} + /* Read lines from the input stream and accumulate them in a chain of struct command_line's, which is then returned. For input from a terminal, the special command "end" is used to mark the end of the @@ -1210,8 +1216,21 @@ read_command_lines (char *prompt_arg, int from_tty, int parse_commands, } } - head = read_command_lines_1 (read_next_line, parse_commands, - validator, closure); + + /* Reading commands assumes the CLI behavior, so temporarily + override the current interpreter with CLI. */ + if (current_interp_named_p (INTERP_CONSOLE)) + head = read_command_lines_1 (read_next_line, parse_commands, + validator, closure); + else + { + struct interp *old_interp = interp_set_temp (INTERP_CONSOLE); + struct cleanup *old_chain = make_cleanup (restore_interp, old_interp); + + head = read_command_lines_1 (read_next_line, parse_commands, + validator, closure); + do_cleanups (old_chain); + } if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ()) { diff --git a/gdb/interps.c b/gdb/interps.c index 36ed520..23e5a10 100644 --- a/gdb/interps.c +++ b/gdb/interps.c @@ -253,6 +253,18 @@ interp_ui_out (struct interp *interp) return current_interpreter->procs->ui_out_proc (current_interpreter); } +/* Temporarily overrides the current interpreter. */ +struct interp * +interp_set_temp (const char *name) +{ + struct interp *interp = interp_lookup (name); + struct interp *old_interp = current_interpreter; + + if (interp) + current_interpreter = interp; + return old_interp; +} + /* Returns the interpreter's cookie. */ void * diff --git a/gdb/interps.h b/gdb/interps.h index 99431ee..bbf0838 100644 --- a/gdb/interps.h +++ b/gdb/interps.h @@ -69,6 +69,7 @@ extern struct interp *interp_lookup (const char *name); extern struct ui_out *interp_ui_out (struct interp *interp); extern void *interp_data (struct interp *interp); extern const char *interp_name (struct interp *interp); +extern struct interp *interp_set_temp (const char *name); extern int current_interp_named_p (const char *name); extern int current_interp_display_prompt_p (void); |