On Fri, Jul 14, 2023 at 2:47 PM Tom de Vries via Gdb-patches < gdb-patches@sourceware.org> wrote: > 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 > --- > gdb/testsuite/gdb.tui/secondary-prompt.exp | 38 ++++++++++++++++++++++ > gdb/top.c | 6 ++++ > 2 files changed, 44 insertions(+) > create mode 100644 gdb/testsuite/gdb.tui/secondary-prompt.exp > > diff --git a/gdb/testsuite/gdb.tui/secondary-prompt.exp > b/gdb/testsuite/gdb.tui/secondary-prompt.exp > new file mode 100644 > index 00000000000..99fedaa3e47 > --- /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 . > + > +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 *$" > diff --git a/gdb/top.c b/gdb/top.c > index 90ddc5f5ea7..2322e55f1db 100644 > --- a/gdb/top.c > +++ b/gdb/top.c > @@ -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 &&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 > > base-commit: 9d9f26d8b1a15561af02370f15be0af0d56ac5fa > -- > 2.35.3 > I can confirm this change causes no regressions and the gdb.tui/secondary-prompt.exp test passes for ppc64le Fedora Rawhide.