Re: [PATCH 00/16] Add styling to the gdb CLI and TUI

Pedro Alves
2019-03-01T13:10:41Z

On 11/30/2018 04:17 PM, Tom Tromey wrote:
>>>>>> "Eli" == Eli Zaretskii <eliz@gnu.org> writes:
>
> Tom> I think it should work, but you'd have to "set style enabled on" first.
>
> Eli> Maybe a TUI invocation should "set style enabled on" on all platforms?
> Eli> Or at least on those that use ncurses?
>
> That would possibly override the user's setting. It's probably better
> to simply implement the console support for Windows. Or, change how the
> disabling is done on Windows -- right now it is done by changing the
> default for this setting, but perhaps it could be done some other way.
>
> Is it possible to ssh in to a Windows machine and then use gdb? That's
> one scenario where you may want to keep the ANSI terminal escape
> sequences in the output. It also may affect how calls to the Windows
> API are handled.
>
> Eli> One problem with this approach is that it needs to fix the escape
> Eli> sequences for the relevant attributes, whereas AFAIU your code
> Eli> simply uses the terminfo that happens to be in effect, is that
> Eli> right?
>
> This patch series uses ANSI escape sequences for the styling; and the
> TUI decodes these and turns them into curses calls.
>
> Tom> Doing it that way can't work due to buffering.
>
> Eli> Not sure I understand. Console output is generally line-buffered, and
> Eli> there's fflush to force writing any buffered output before applying
> Eli> text attributes. Am I missing something?
>
> utils.c implements its own buffering. Previous to this series this was
> only done when "wrap_column > 0", but patch #1 changes this code to
> always buffer.
>
> This is a problem for other approaches because styles are emitted inline
> with other text; and then flushed as a unit.
>
> Tom> Also, this approach would be undesirable anyway, because GNU Source
> Tom> Highlight emits escape codes -- that's why I abandoned my earlier
> Tom> plan of implementing styling as objects in the utils.c buffer.
>
> Eli> What is GNU Source Highlight, and what is its relevance to the issue
> Eli> at hand?
>
> GNU Source Highlight is used to style source text.
>
> https://www.gnu.org/software/src-highlite/
>
> Support for using it is added to gdb in patch #15.
>
> Tom> Instead, I think filtering the escape sequences is really the only
> Tom> way.
>
> Eli> The problem with that is that it hard-codes the SGR sequences concepts
> Eli> right into the design, and the escape sequences are unknown in advance
> Eli> on systems where there's no terminfo.
>
> Only terminals using the ANSI sequences are supported by this series, at
> least for the CLI. The TUI can support more in theory, though I have no
> way to test that.

The Windows console in Windows 10 Anniversary Update supports ANSI escape sequences:

[1] https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
[2] https://blogs.msdn.microsoft.com/commandline/2017/04/11/windows-10-creators-update-whats-new-in-bashwsl-windows-console/

Basically, GDB needs to call SetConsoleMode with
ENABLE_VIRTUAL_TERMINAL_PROCESSING at early startup to enable the feature.
There's an example at the bottom of page [1] above.

I have no idea whether that interacts badly with readline or curses, but
it seems like the ideal solution going forward.

Thanks,
Pedro Alves