Display the ">" prompt in interactive mode while reading canned
authorEli Zaretskii <eliz@gnu.org>
Tue, 8 May 2012 18:49:42 +0000 (18:49 +0000)
committerEli Zaretskii <eliz@gnu.org>
Tue, 8 May 2012 18:49:42 +0000 (18:49 +0000)
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.

gdb/ChangeLog
gdb/cli/cli-script.c
gdb/interps.c
gdb/interps.h

index 0a7266db3a00a9dbe41c0ead0e1f4d68ec3f3741..17039cb57283b805afe9edb40f523b715161d970 100644 (file)
@@ -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.
index cfa1c771c50b9b17fe585443348f93c99a5f8fae..4b6c416914584c45af803a6b489502029a37f2e7 100644 (file)
@@ -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 ())
     {
index 36ed5204277a13f350a67bac2814e4b75704293c..23e5a1051cd54817255c9f68e4cf7c06cc19e585 100644 (file)
@@ -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 *
index 99431ee146949bb00e51daef9feeb5697583bf06..bbf083814a2175e30102c751bd3faaec0913e264 100644 (file)
@@ -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);