tui: don't overwrite a secondary prompt that was given no input
This patch fixes the following bug in TUI: (gdb) break foo No symbol table is loaded. Use the "file" command. Make breakpoint pending on future shared library load? (y or [n]) <ENTER> By submitting an empty command line to a secondary prompt, the line corresponding to the secondary prompt is undesirably cleared and overwritten. Outside of a secondary prompt, clearing the prompt line after submitting an empty command line is intended behavior which complements GDB's repeat-command shorthand. But inside a secondary prompt, this behavior is undesired since the shorthand is not applicable in that case. We should retain the secondary-prompt line even when it's given no input. This patch makes sure that a prompt that was given an empty command line is cleared and overwritten only if it's not a secondary prompt. To acheive this, a new predicate is defined which informs us whether the current input handler is a secondary prompt. gdb/ChangeLog: * top.h (gdb_in_secondary_prompt_p): Declare. * top.c (gdb_secondary_prompt_depth): Define. (gdb_in_secondary_prompt_p): Define. (gdb_readline_wrapper_cleanup): Decrement gdb_secondary_prompt_depth. (gdb_readline_wrapper): Increment gdb_secondary_prompt_depth. * tui/tui-io.c (tui_getc): Don't clear the prompt line if we are in a secondary prompt.
This commit is contained in:
parent
7a8bcb88e7
commit
948578a989
@ -1,3 +1,14 @@
|
||||
2015-08-21 Patrick Palka <patrick@parcs.ath.cx>
|
||||
|
||||
* top.h (gdb_in_secondary_prompt_p): Declare.
|
||||
* top.c (gdb_secondary_prompt_depth): Define.
|
||||
(gdb_in_secondary_prompt_p): Define.
|
||||
(gdb_readline_wrapper_cleanup): Decrement
|
||||
gdb_secondary_prompt_depth.
|
||||
(gdb_readline_wrapper): Increment gdb_secondary_prompt_depth.
|
||||
* tui/tui-io.c (tui_getc): Don't clear the prompt line if we
|
||||
are in a secondary prompt.
|
||||
|
||||
2015-08-21 Patrick Palka <patrick@parcs.ath.cx>
|
||||
|
||||
* tui/tui-io.c (tui_getc): Use tui_putc instead of waddch to
|
||||
|
18
gdb/top.c
18
gdb/top.c
@ -754,6 +754,21 @@ static char *gdb_readline_wrapper_result;
|
||||
return. */
|
||||
static void (*saved_after_char_processing_hook) (void);
|
||||
|
||||
|
||||
/* The number of nested readline secondary prompts that are currently
|
||||
active. */
|
||||
|
||||
static int gdb_secondary_prompt_depth = 0;
|
||||
|
||||
/* See top.h. */
|
||||
|
||||
int
|
||||
gdb_in_secondary_prompt_p (void)
|
||||
{
|
||||
return gdb_secondary_prompt_depth > 0;
|
||||
}
|
||||
|
||||
|
||||
/* This function is called when readline has seen a complete line of
|
||||
text. */
|
||||
|
||||
@ -808,6 +823,8 @@ gdb_readline_wrapper_cleanup (void *arg)
|
||||
|
||||
gdb_readline_wrapper_result = NULL;
|
||||
gdb_readline_wrapper_done = 0;
|
||||
gdb_secondary_prompt_depth--;
|
||||
gdb_assert (gdb_secondary_prompt_depth >= 0);
|
||||
|
||||
after_char_processing_hook = saved_after_char_processing_hook;
|
||||
saved_after_char_processing_hook = NULL;
|
||||
@ -833,6 +850,7 @@ gdb_readline_wrapper (const char *prompt)
|
||||
|
||||
cleanup->target_is_async_orig = target_is_async_p ();
|
||||
|
||||
gdb_secondary_prompt_depth++;
|
||||
back_to = make_cleanup (gdb_readline_wrapper_cleanup, cleanup);
|
||||
|
||||
if (cleanup->target_is_async_orig)
|
||||
|
@ -65,6 +65,10 @@ extern char *get_prompt (void);
|
||||
by gdb for its command prompt. */
|
||||
extern void set_prompt (const char *s);
|
||||
|
||||
/* Return 1 if the current input handler is a secondary prompt, 0 otherwise. */
|
||||
|
||||
extern int gdb_in_secondary_prompt_p (void);
|
||||
|
||||
/* From random places. */
|
||||
extern int readnow_symbol_files;
|
||||
|
||||
|
@ -585,7 +585,7 @@ tui_getc (FILE *fp)
|
||||
with empty lines with gdb prompt at beginning. Instead of that,
|
||||
stay on the same line but provide a visual effect to show the
|
||||
user we recognized the command. */
|
||||
if (rl_end == 0)
|
||||
if (rl_end == 0 && !gdb_in_secondary_prompt_p ())
|
||||
{
|
||||
wmove (w, getcury (w), 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user