[PATCH 06/16] Reset terminal styles
Tom Tromey
tom@tromey.com
Fri Dec 28 19:01:00 GMT 2018
>>>>> "Joel" == Joel Brobecker <brobecker@adacore.com> writes:
>> printf_command (const char *arg, int from_tty)
>> {
>> ui_printf (arg, gdb_stdout);
>> + reset_terminal_style (gdb_stdout);
>> + wrap_here ("");
Joel> Can you explain why you added the "wrap_here"?
gdb's pager has the unusual property that it introduces another layer of
buffering that isn't accessible to gdb_flush. So, to properly flush
stdout and I guess stderr, one must first call wrap_here to flush this
buffer.
You can see this most clearly in exceptions.c:print_flush, which is
where this seems to have been documented.
In this particular case, reset_terminal_style might emit an escape
sequence to the wrap buffer. So, wrap_here is needed to be sure this is
flushed. We can't flush in reset_terminal_style because it might be
used in cases where flushing is inappropriate, for example in the middle
of a command when paging is still desired.
I think a better design would be to require nothing more than gdb_flush.
However, this requires some thought and experimentation, and seemed
orthogonal to my goal in this series.
Tom
More information about the Gdb-patches
mailing list