From 88b7e7ccb958220adabc307e6d38fc66877820fb Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 2 Jul 2019 15:18:27 -0600 Subject: Fix flushing bug in tui_puts_internal A while back I changed gdb not to flush in some places. It turned out that this broke the TUI a little. An easy way to see it is to run "gdb -tui -nx", then "file gdb" at the gdb prompt. gdb will print the usual "Reading symbols..." message -- but it won't appear on-screen until the reading is complete. This patch changes the TUI to do the equivalent of line buffering in tui_puts_internal. gdb/ChangeLog 2019-07-17 Tom Tromey * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is seen. --- gdb/ChangeLog | 5 +++++ gdb/tui/tui-io.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5a3d6c5..4890f6f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2019-07-17 Tom Tromey + * tui/tui-io.c (tui_puts_internal): Call wrefresh if newline is + seen. + +2019-07-17 Tom Tromey + * tui/tui-win.c (tui_source_window_base::set_new_height) (tui_source_window_base::do_make_visible_with_new_height): Use m_has_locator field directly. diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index c9607d8..cb27306 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -461,9 +461,13 @@ tui_puts_internal (WINDOW *w, const char *string, int *height) { char c; int prev_col = 0; + bool saw_nl = false; while ((c = *string++) != 0) { + if (c == '\n') + saw_nl = true; + if (c == '\1' || c == '\2') { /* Ignore these, they are readline escape-marking @@ -492,6 +496,8 @@ tui_puts_internal (WINDOW *w, const char *string, int *height) } } update_cmdwin_start_line (); + if (saw_nl) + wrefresh (w); } /* Print a string in the curses command window. The output is -- cgit v1.1