diff options
Diffstat (limited to 'gdb/completer.c')
-rw-r--r-- | gdb/completer.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gdb/completer.c b/gdb/completer.c index 168fab7..605ac1f 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -1362,6 +1362,10 @@ complete_line_internal_1 (completion_tracker &tracker, { /* We've recognized a full command. */ + /* Disable pagination since responding to the pagination prompt + overwrites rl_line_buffer. */ + scoped_restore pag_restore = make_scoped_restore (&pagination_enabled, false); + if (p == tmp_command + point) { /* There is no non-whitespace in the line beyond the @@ -1461,7 +1465,8 @@ complete_line_internal_1 (completion_tracker &tracker, } /* Wrapper around complete_line_internal_1 to handle - MAX_COMPLETIONS_REACHED_ERROR. */ + MAX_COMPLETIONS_REACHED_ERROR and possible progress update + interactions. */ static void complete_line_internal (completion_tracker &tracker, @@ -1469,6 +1474,11 @@ complete_line_internal (completion_tracker &tracker, const char *line_buffer, int point, complete_line_internal_reason reason) { + scoped_restore restore_prefix_state + = make_scoped_restore + (&cur_prefix_state, + ui_out::progress_update::prefix_state::NEWLINE_NEEDED); + try { complete_line_internal_1 (tracker, text, line_buffer, point, reason); @@ -1478,6 +1488,12 @@ complete_line_internal (completion_tracker &tracker, if (except.error != MAX_COMPLETIONS_REACHED_ERROR) throw; } + + /* If progress update messages printed, then the text being completed + needs to be printed again. */ + if (cur_prefix_state + == ui_out::progress_update::prefix_state::NEWLINE_PRINTED) + rl_forced_update_display (); } /* See completer.h. */ |