diff options
author | Tom de Vries <tdevries@suse.de> | 2023-07-26 13:31:53 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2023-07-26 13:31:53 +0200 |
commit | 87c9b0289d73382cc72adb84d221b0a8ceb33ef8 (patch) | |
tree | dd2dc5d8216792a23b31961de29d91eb2c8b1568 | |
parent | 2b8bee8b34dd1c7b5ccac636e184c5cbff61adea (diff) | |
download | binutils-87c9b0289d73382cc72adb84d221b0a8ceb33ef8.zip binutils-87c9b0289d73382cc72adb84d221b0a8ceb33ef8.tar.gz binutils-87c9b0289d73382cc72adb84d221b0a8ceb33ef8.tar.bz2 |
[gdb/tui] Fix secondary prompt
With CLI, a session defining a command looks like:
...
(gdb) define foo
Type commands for definition of "foo".
End with a line saying just "end".
>bar
>end
(gdb)
...
With TUI however, we get the same secondary prompts, and type the same, but
are left with:
...
(gdb) define foo
Type commands for definition of "foo".
End with a line saying just "end".
(gdb)
...
Fix this by calling tui_inject_newline_into_command_window in
gdb_readline_wrapper_line, as is done in tui_command_line_handler.
Tested on x86_64-linux.
PR tui/30636
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30636
-rw-r--r-- | gdb/testsuite/gdb.tui/secondary-prompt.exp | 38 | ||||
-rw-r--r-- | gdb/top.c | 6 |
2 files changed, 44 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.tui/secondary-prompt.exp b/gdb/testsuite/gdb.tui/secondary-prompt.exp new file mode 100644 index 0000000..99fedaa --- /dev/null +++ b/gdb/testsuite/gdb.tui/secondary-prompt.exp @@ -0,0 +1,38 @@ +# Copyright 2023 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/>. + +require allow_tui_tests + +tuiterm_env + +Term::clean_restart 24 80 + +if {![Term::enter_tui]} { + unsupported "TUI not supported" + return +} + +# Define a macro. +send_gdb "define foo\n" +send_gdb "bar\n" +send_gdb "end\n" + +# Wait for the last secondary prompt to appear, followed by the gdb prompt. +Term::wait_for ">end" + +# Regression test for PR tui/30636. Make sure the secondary prompts are not +# overwritten. +Term::check_region_contents "secondary prompt not overwritten" 0 19 80 2 \ + "^>bar *\r\n>end *$" @@ -77,6 +77,7 @@ #if defined(TUI) # include "tui/tui.h" +# include "tui/tui-io.h" #endif #ifndef O_NOCTTY @@ -958,6 +959,11 @@ gdb_readline_wrapper_line (gdb::unique_xmalloc_ptr<char> &&line) saved_after_char_processing_hook = after_char_processing_hook; after_char_processing_hook = NULL; +#if defined(TUI) + if (tui_active) + tui_inject_newline_into_command_window (); +#endif + /* Prevent parts of the prompt from being redisplayed if annotations are enabled, and readline's state getting out of sync. We'll reinstall the callback handler, which puts the terminal in raw |