Re: [PING^2][PATCH][PR gdb/21690] Fix interruption of command history search

Hannes Domani
2020-06-08T19:45:57Z

Am Montag, 8. Juni 2020, 19:37:05 MESZ hat Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> Folgendes geschrieben:

> Am Montag, 8. Juni 2020, 17:36:09 MESZ hat Andrew Burgess <andrew.burgess@embecosm.com> Folgendes geschrieben:
>
> > * Hannes Domani <ssbssa@yahoo.de> [2020-06-08 14:58:50 +0000]:
> >
> > >  Am Montag, 8. Juni 2020, 16:41:32 MESZ hat Andrew Burgess <andrew.burgess@embecosm.com> Folgendes geschrieben:
> > >
> > > > * Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> [2020-06-08 11:51:07 +0000]:
> > > >
> > > > > Ping.
> > > > >
> > > > > Am Freitag, 15. Mai 2020, 11:00:41 MESZ hat Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> Folgendes geschrieben:
> > > > >
> > > > > > Am Samstag, 25. April 2020, 19:17:34 MESZ hat Hannes Domani via Gdb-patches <gdb-patches@sourceware.org> Folgendes geschrieben:
> > > > > >
> > > > > > Ping.
> > > > > >
> > > > > > > If you press Ctrl-C during an incremental search of the readline history, the
> > > > > > > prompt is reset, but readline is still in the incremental search mode.
> > > > > > >
> > > > > > > The call of rl_callback_sigcleanup cleans up the internal readline state, and
> > > > > > > disables the incremental search mode.
> > > >
> > > > I didn't look into the implementation of this, but something seems a
> > > > little odd, though I don't know if this is just my machine setup....
> > > >
> > > > I start a GDB session, and do this:
> > > >
> > > >   (gdb) echo hello\n
> > > >   hello
> > > >
> > > > At this point I start a reverse search, so I type:
> > > >
> > > >   <ctrl+r>
> > > >   echo
> > > >   <ctrl+c>
> > > >
> > > > Now I'm left in this situation:
> > > >
> > > >   (gdb) echo hello\n
> > > >         ^
> > > >         '-- Prompt is here.
> > > >
> > > > So, whatever I was in the process of finding when I hit Ctrl+C is left
> > > > on my prompt line in an editable state.
> > > >
> > > > This is different from the behaviour I see in, for example, bash,
> > > > where when I Ctrl+C the reverse search is aborted and I'm dropped back
> > > > to an empty prompt.
> > > >
> > > > Which behaviour do you see?
> > >
> > > This is the behaviour I also see with this patch applied.
> > >
> > >
> > > > Which behaviour do you expect to see?
> > >
> > > I didn't compare with anything else, so my expectation was just that it
> > > shouldn't be in this weird state where the prompt is empty, but readline
> > > actually thinks it's still in the reverse search.
> >
> > I think we should end up back at the empty prompt.  That certainly
> > feels more natural after a Ctrl+C (to me anyway).
>
> I tried to implement that, and the best source I could find was this:
> https://lists.gnu.org/archive/html/bug-readline/2016-04/msg00071.html
>
> But I could not figure out a way that also works in TUI mode.
>
> How does it work that the line is cleared when not in the reverse-search mode?

I figured that part out, the line is cleared by one of the observers:
gdb::observers::command_error.notify ();

So I moved rl_callback_sigcleanup in front of it, and the line is cleared
(kinda), but only after the current line is displayed, so now I get 2 prompts
on top of each other:

(reverse-i-search)`a': echo Quitn
(gdb) echo (gdb)

At this point I stopped for the day.

Hannes