Add "continue" response to pager
This adds a "continue" response to the pager. If the user types "c" in response to the pager prompt, pagination will be disabled for the duration of one command -- but re-enabled afterward. This is handy if you type a command that produces a lot of output, and you don't want to baby-sit it by typing "return" each time the prompt comes up. Tested by the buildbot. gdb/ChangeLog 2018-06-05 Tom Tromey <tom@tromey.com> PR cli/12326: * NEWS: Add entry about pager. * utils.c (pagination_disabled_for_command): New global. (prompt_for_continue): Allow "c" response to prompt. (reinitialize_more_filter): Clear pagination_disabled_for_command. (fputs_maybe_filtered): Check pagination_disabled_for_command. gdb/doc/ChangeLog 2018-06-05 Tom Tromey <tom@tromey.com> PR cli/12326: * gdb.texinfo (Screen Size): Document "c" response to pagination prompt. gdb/testsuite/ChangeLog 2018-06-05 Tom Tromey <tom@tromey.com> PR cli/12326: * gdb.cp/static-print-quit.exp: Update. * lib/gdb.exp (pagination_prompt): Update. * gdb.base/page.exp: Use pagination_prompt. Add new tests. * gdb.python/python.exp: Update.
This commit is contained in:
parent
5c4ce239a3
commit
eb6af80922
@ -1,3 +1,13 @@
|
||||
2018-06-05 Tom Tromey <tom@tromey.com>
|
||||
|
||||
PR cli/12326:
|
||||
* NEWS: Add entry about pager.
|
||||
* utils.c (pagination_disabled_for_command): New global.
|
||||
(prompt_for_continue): Allow "c" response to prompt.
|
||||
(reinitialize_more_filter): Clear
|
||||
pagination_disabled_for_command.
|
||||
(fputs_maybe_filtered): Check pagination_disabled_for_command.
|
||||
|
||||
2018-06-04 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* ada-lang.h (ada_lookup_symbol_list): Update.
|
||||
|
3
gdb/NEWS
3
gdb/NEWS
@ -9,6 +9,9 @@
|
||||
or by inferring from the last executable used, rather than the startup
|
||||
default.
|
||||
|
||||
* The pager now allows a "c" response, meaning to disable the pager
|
||||
for the rest of the current command.
|
||||
|
||||
* The commands 'info variables/functions/types' now show the source line
|
||||
numbers of symbol definitions when available.
|
||||
|
||||
|
@ -1,3 +1,9 @@
|
||||
2018-06-05 Tom Tromey <tom@tromey.com>
|
||||
|
||||
PR cli/12326:
|
||||
* gdb.texinfo (Screen Size): Document "c" response to pagination
|
||||
prompt.
|
||||
|
||||
2018-05-31 Maciej W. Rozycki <macro@mips.com>
|
||||
|
||||
* gdb.texinfo (Choosing Target Byte Order): Document endianness
|
||||
|
@ -23886,11 +23886,13 @@ Print ten commands just after the commands last printed.
|
||||
Certain commands to @value{GDBN} may produce large amounts of
|
||||
information output to the screen. To help you read all of it,
|
||||
@value{GDBN} pauses and asks you for input at the end of each page of
|
||||
output. Type @key{RET} when you want to continue the output, or @kbd{q}
|
||||
to discard the remaining output. Also, the screen width setting
|
||||
determines when to wrap lines of output. Depending on what is being
|
||||
printed, @value{GDBN} tries to break the line at a readable place,
|
||||
rather than simply letting it overflow onto the following line.
|
||||
output. Type @key{RET} when you want to see one more page of output,
|
||||
@kbd{q} to discard the remaining output, or @kbd{c} to continue
|
||||
without paging for the rest of the current command. Also, the screen
|
||||
width setting determines when to wrap lines of output. Depending on
|
||||
what is being printed, @value{GDBN} tries to break the line at a
|
||||
readable place, rather than simply letting it overflow onto the
|
||||
following line.
|
||||
|
||||
Normally @value{GDBN} knows the size of the screen from the terminal
|
||||
driver software. For example, on Unix @value{GDBN} uses the termcap data base
|
||||
|
@ -1,3 +1,11 @@
|
||||
2018-06-05 Tom Tromey <tom@tromey.com>
|
||||
|
||||
PR cli/12326:
|
||||
* gdb.cp/static-print-quit.exp: Update.
|
||||
* lib/gdb.exp (pagination_prompt): Update.
|
||||
* gdb.base/page.exp: Use pagination_prompt. Add new tests.
|
||||
* gdb.python/python.exp: Update.
|
||||
|
||||
2018-06-04 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* gdb.mi/list-thread-groups-no-inferior.exp: New testcase.
|
||||
|
@ -47,7 +47,7 @@ gdb_test "show pagination" "State of pagination is on.*" "pagination is on"
|
||||
gdb_test_no_output "set height 10"
|
||||
send_gdb "help\n"
|
||||
gdb_expect_list "paged help" \
|
||||
".*---Type <return> to continue, or q <return> to quit---" {
|
||||
".*$pagination_prompt" {
|
||||
"List of classes of commands:"
|
||||
""
|
||||
"aliases -- Aliases of other commands"
|
||||
@ -60,6 +60,25 @@ gdb_expect_list "paged help" \
|
||||
}
|
||||
gdb_test "q"
|
||||
|
||||
gdb_test_no_output "set height 5"
|
||||
send_gdb "printf \"1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\"\n"
|
||||
gdb_expect_list "paged count" \
|
||||
".*$pagination_prompt" {
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
}
|
||||
send_gdb "c\n"
|
||||
gdb_expect_list "paged count remainder" "${gdb_prompt} " {
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
}
|
||||
|
||||
gdb_exit
|
||||
return 0
|
||||
|
@ -29,10 +29,10 @@ gdb_test_no_output "set height 2"
|
||||
|
||||
set test "print c - <return>"
|
||||
gdb_test_multiple "print c" $test {
|
||||
-re "\\$\[0-9\]+ = \{loooooooooooooooooooooooooooooooooooooooooooooong = 0, static field = \{\r\n---Type <return>" {
|
||||
-re "\\$\[0-9\]+ = \{loooooooooooooooooooooooooooooooooooooooooooooong = 0, static field = \{\r\n--Type <RET>" {
|
||||
pass $test
|
||||
}
|
||||
-re "\r\n---Type <return>" {
|
||||
-re "\r\n--Type <RET>" {
|
||||
# gdb-7.1 did not crash with this testcase but it had the same bug.
|
||||
untested "bug does not reproduce"
|
||||
return 0
|
||||
@ -41,14 +41,14 @@ gdb_test_multiple "print c" $test {
|
||||
|
||||
set test "print c - q <return>"
|
||||
gdb_test_multiple "" $test {
|
||||
-re " to continue, or q <return>" {
|
||||
-re " for more, q to quit, " {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
|
||||
set test "print c - to quit"
|
||||
set test "print c - remainder"
|
||||
gdb_test_multiple "" $test {
|
||||
-re " to quit---$" {
|
||||
-re "c to continue without paging--$" {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
|
@ -143,13 +143,13 @@ gdb_test_no_output "set height $lines"
|
||||
|
||||
set test "verify pagination beforehand"
|
||||
gdb_test_multiple "python print (\"\\n\" * $lines)" $test {
|
||||
-re "---Type <return>" {
|
||||
-re "--Type <RET>" {
|
||||
exp_continue
|
||||
}
|
||||
-re " to continue, or q <return>" {
|
||||
-re " for more, q to quit" {
|
||||
exp_continue
|
||||
}
|
||||
-re " to quit---$" {
|
||||
-re ", c to continue without paging--$" {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
@ -159,13 +159,13 @@ gdb_test "python if gdb.execute('python print (\"\\\\n\" * $lines)', to_string=T
|
||||
|
||||
set test "verify pagination afterwards"
|
||||
gdb_test_multiple "python print (\"\\n\" * $lines)" $test {
|
||||
-re "---Type <return>" {
|
||||
-re "--Type <RET>" {
|
||||
exp_continue
|
||||
}
|
||||
-re " to continue, or q <return>" {
|
||||
-re " for more, q to quit" {
|
||||
exp_continue
|
||||
}
|
||||
-re " to quit---$" {
|
||||
-re ", c to continue without paging--$" {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,8 @@ if ![info exists gdb_prompt] then {
|
||||
}
|
||||
|
||||
# A regexp that matches the pagination prompt.
|
||||
set pagination_prompt [string_to_regexp "---Type <return> to continue, or q <return> to quit---"]
|
||||
set pagination_prompt \
|
||||
"--Type <RET> for more, q to quit, c to continue without paging--"
|
||||
|
||||
# The variable fullname_syntax_POSIX is a regexp which matches a POSIX
|
||||
# absolute path ie. /foo/
|
||||
|
27
gdb/utils.c
27
gdb/utils.c
@ -1283,6 +1283,10 @@ show_chars_per_line (struct ui_file *file, int from_tty,
|
||||
/* Current count of lines printed on this page, chars on this line. */
|
||||
static unsigned int lines_printed, chars_printed;
|
||||
|
||||
/* True if pagination is disabled for just one command. */
|
||||
|
||||
static bool pagination_disabled_for_command;
|
||||
|
||||
/* Buffer and start column of buffered text, for doing smarter word-
|
||||
wrapping. When someone calls wrap_here(), we start buffering output
|
||||
that comes through fputs_filtered(). If we see a newline, we just
|
||||
@ -1467,12 +1471,14 @@ prompt_for_continue (void)
|
||||
prompt_for_continue_wait_time. */
|
||||
using namespace std::chrono;
|
||||
steady_clock::time_point prompt_started = steady_clock::now ();
|
||||
bool disable_pagination = pagination_disabled_for_command;
|
||||
|
||||
if (annotation_level > 1)
|
||||
printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
|
||||
|
||||
strcpy (cont_prompt,
|
||||
"---Type <return> to continue, or q <return> to quit---");
|
||||
"--Type <RET> for more, q to quit, "
|
||||
"c to continue without paging--");
|
||||
if (annotation_level > 1)
|
||||
strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
|
||||
|
||||
@ -1502,11 +1508,14 @@ prompt_for_continue (void)
|
||||
if (p[0] == 'q')
|
||||
/* Do not call quit here; there is no possibility of SIGINT. */
|
||||
throw_quit ("Quit");
|
||||
if (p[0] == 'c')
|
||||
disable_pagination = true;
|
||||
}
|
||||
|
||||
/* Now we have to do this again, so that GDB will know that it doesn't
|
||||
need to save the ---Type <return>--- line at the top of the screen. */
|
||||
reinitialize_more_filter ();
|
||||
pagination_disabled_for_command = disable_pagination;
|
||||
|
||||
dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
|
||||
}
|
||||
@ -1536,6 +1545,7 @@ reinitialize_more_filter (void)
|
||||
{
|
||||
lines_printed = 0;
|
||||
chars_printed = 0;
|
||||
pagination_disabled_for_command = false;
|
||||
}
|
||||
|
||||
/* Indicate that if the next sequence of characters overflows the line,
|
||||
@ -1680,6 +1690,7 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
|
||||
/* Don't do any filtering if it is disabled. */
|
||||
if (stream != gdb_stdout
|
||||
|| !pagination_enabled
|
||||
|| pagination_disabled_for_command
|
||||
|| batch_flag
|
||||
|| (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
|
||||
|| top_level_interpreter () == NULL
|
||||
@ -1696,8 +1707,11 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
|
||||
lineptr = linebuffer;
|
||||
while (*lineptr)
|
||||
{
|
||||
/* Possible new page. */
|
||||
if (filter && (lines_printed >= lines_per_page - 1))
|
||||
/* Possible new page. Note that PAGINATION_DISABLED_FOR_COMMAND
|
||||
might be set during this loop, so we must continue to check
|
||||
it here. */
|
||||
if (filter && (lines_printed >= lines_per_page - 1)
|
||||
&& !pagination_disabled_for_command)
|
||||
prompt_for_continue ();
|
||||
|
||||
while (*lineptr && *lineptr != '\n')
|
||||
@ -1737,8 +1751,11 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
|
||||
if (wrap_column)
|
||||
fputc_unfiltered ('\n', stream);
|
||||
|
||||
/* Possible new page. */
|
||||
if (lines_printed >= lines_per_page - 1)
|
||||
/* Possible new page. Note that
|
||||
PAGINATION_DISABLED_FOR_COMMAND might be set during
|
||||
this loop, so we must continue to check it here. */
|
||||
if (lines_printed >= lines_per_page - 1
|
||||
&& !pagination_disabled_for_command)
|
||||
prompt_for_continue ();
|
||||
|
||||
/* Now output indentation and wrapped string. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user