This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] python prompt additions at first prompt.


little bug with the new python prompt stuff, the prompt_hook doesn't
take effect until the second prompt.

I couldn't for the life of me figure out how to do a testcase for this...
using gdb.mi/mi-async.exp as an example of using -ex it still didn't
want to work,
there was also the need to match the very first prompt.
and command line python stuff seems to go awry of how skip_python_tests works.
sorry.

before:
gdb/gdb -quiet -ex 'set prompt (foo) ' -ex 'python def prompt(x):
return "(bar) "' -ex 'python gdb.prompt_hook = prompt'
(foo)
(bar) quit

~/git/gdb/gdb/gdb -quiet -ex 'python def prompt(x): return "(bar) "'
-ex 'python gdb.prompt_hook = prompt'
(gdb)
(bar) quit


after:
gdb/gdb -quiet -ex 'set prompt (foo) ' -ex 'python def prompt(x):
return "(bar) "' -ex 'python gdb.prompt_hook = prompt'
(bar)
(bar) quit

gdb/gdb -quiet -ex 'python def prompt(x): return "(bar) "' -ex 'python
gdb.prompt_hook = prompt'
(bar)
(bar) quit

ran the above things with --enable-tui --disable-tui plus gdb --interpreter=tui
and ran the testsuite with --enable-tui and --disable-tui.
didn't see anything but what looked like tests that fail randomly.

I think it's ok anyways, the 'if (async_command_editing_p)' case in
display_gdb_prompt seems to cover it,
with the addition of rl_callback_handler_remove() which afaict seemed
ok to call before a handler is installed

otherwise, there is a workaround
calling gdb.execute("set prompt " + prompt("foo"))

Thanks.

2011-07-30  Matt Rice  <ratmice@gmail.com>

        * event-top.c (cli_command_loop): Remove code redundant to
        display_gdb_prompt.
        * tui/tui-interp.c (tui_command_loop): Ditto.
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 37882728..fb0478f 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -185,27 +185,7 @@ rl_callback_read_char_wrapper (gdb_client_data client_data)
 void
 cli_command_loop (void)
 {
-  /* If we are using readline, set things up and display the first
-     prompt, otherwise just print the prompt.  */
-  if (async_command_editing_p)
-    {
-      int length;
-      char *a_prompt;
-      char *gdb_prompt = get_prompt (0);
-
-      /* Tell readline what the prompt to display is and what function
-         it will need to call after a whole line is read.  This also
-         displays the first prompt.  */
-      length = strlen (get_prefix (0))
-	+ strlen (gdb_prompt) + strlen (get_suffix(0)) + 1;
-      a_prompt = (char *) alloca (length);
-      strcpy (a_prompt, get_prefix (0));
-      strcat (a_prompt, gdb_prompt);
-      strcat (a_prompt, get_suffix (0));
-      rl_callback_handler_install (a_prompt, input_handler);
-    }
-  else
-    display_gdb_prompt (0);
+  display_gdb_prompt (0);
 
   /* Now it's time to start the event loop.  */
   start_event_loop ();
diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c
index 919d1ac..9e34412 100644
--- a/gdb/tui/tui-interp.c
+++ b/gdb/tui/tui-interp.c
@@ -139,27 +139,7 @@ tui_exec (void *data, const char *command_str)
 static void
 tui_command_loop (void *data)
 {
-  /* If we are using readline, set things up and display the first
-     prompt, otherwise just print the prompt.  */
-  if (async_command_editing_p)
-    {
-      int length;
-      char *a_prompt;
-      char *gdb_prompt = get_prompt (0);
-
-      /* Tell readline what the prompt to display is and what function
-         it will need to call after a whole line is read. This also
-         displays the first prompt.  */
-      length = strlen (get_prefix (0))
-	+ strlen (gdb_prompt) + strlen (get_suffix (0)) + 1;
-      a_prompt = (char *) alloca (length);
-      strcpy (a_prompt, get_prefix (0));
-      strcat (a_prompt, gdb_prompt);
-      strcat (a_prompt, get_suffix (0));
-      rl_callback_handler_install (a_prompt, input_handler);
-    }
-  else
-    display_gdb_prompt (0);
+  display_gdb_prompt (0);
 
   /* Loop until there is nothing to do. This is the entry point to the
      event loop engine. gdb_do_one_event, called via catch_errors()

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]