This is the mail archive of the insight@sourceware.cygnus.com mailing list for the Insight project.


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

Re: prompt in console window


Nicholas_Karagas@cirilium.com wrote:
> 
> Hello, Insight gurus...
> 
> I've recently come across a problem using the console window in Insight.
> In ordinary GDB, if the number of lines printed exceeds the 'height'
> parameter, then the debugger will issue the prompt '---Type <return> to
> continue, or q <return> to quit---'.  However, this apparently doesn't work
> in the Insight console, as the call to readline (readline.c:337) from
> prompt_for_continue (utils.c:1619) always returns 0x0, and never shows the
> prompt in the console window.  I imagine that this is because readline
> expects everything to be going to and from stdout (since it doesn't require
> a stream as a parameter).  Is there a quick fix for this that doesn't
> involve fiddling with readline, and therefore binutils (I think that's
> where it lives)?  Thanks in advance.

Ugh. Don't even ask. This is very nasty, and not particularly useful in
a GUI, anyway (IMO). That's why man invented scrollbars. O:-)

The trick that Insight uses to turn this off is "set height 0", which
tells gdb that the window height is zero lines high. This can be
overridden by setting it to some number, but I just tried it in a recent
snapshot, and it did exactly what I thought it would: it works as
expected, but the message "---Type <return>..." appears in the
controlling terminal, not in the console window. (Which reminds me, why
haven't we closed stdout???) This happens because this message is passed
to readline to handle, and readline doesn't understand how to use the
GUI's printing streams. In order for anything to show up in the GUI, all
output MUST pass through fputs_unfiltered, which is hooked. This
function is called by all of gdb's printf_unfiltered/filtered commands.
(So if anyone happens to see a "printf" or "fprintf" or "putc" or "puts"
or anything like them without "_unfiltered" or "_filtered" in gdb, it's
a bug.)

We could hack readline to take an input/output hook, but when we
upgraded to the lastest version of readline, we really wanted to avoid
any hacking. I suspect this could be done, but I've not taken a good,
serious look at readline.

Of course, the console window could be modified to do this, too. It
probably wouldn't be too difficult, either, but it would not qualify as
"quick". Use ConsoleWin::insert to count the number of lines inserted,
when it hits some maximum, output the prompt, wait for the keypress,
etc. The trick, though, is that many internal messages/errors are sent
to the console. One must be certain that we are processing user input
when we do this (so set some flag saying it's okay to do this in
ConsoleWin::invoke). That part would be quick, but hooking it all up to
the preferences dialog and all the little nitpicks (adding online
documentation for it) can be too easily overlooked.

Keith
-- 
Why chat when you can Firetalk?
Firetalk ID: Keith (10320)
www.firetalk.com

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