From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 6A6D03857363; Fri, 15 Apr 2022 17:53:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6A6D03857363 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Allow word wrapping even when paging is disabled X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 1c9cc05244f67c4e5a888394b2c9a309164ca02d X-Git-Newrev: 1f0f8b5d9d9053c4d164d01c6915c2e6b8c6ea48 Message-Id: <20220415175354.6A6D03857363@sourceware.org> Date: Fri, 15 Apr 2022 17:53:54 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Apr 2022 17:53:54 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D1f0f8b5d9d90= 53c4d164d01c6915c2e6b8c6ea48 commit 1f0f8b5d9d9053c4d164d01c6915c2e6b8c6ea48 Author: Tom Tromey Date: Sat Jan 8 18:26:35 2022 -0700 Allow word wrapping even when paging is disabled =20 PR cli/20741 points out that when pagination is disabled, this also disabled word wrapping. However, the manual documents that these settings are separate -- if you intend to disable the wrapping, you must use "set width unlimited". =20 This patch fixes the bug by letting the pagination-disabled case fall through to the code that also handles word-wrapping. =20 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=3D20741 Diff: --- gdb/utils.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/gdb/utils.c b/gdb/utils.c index 62a75d9e37f..b7d5859d6b3 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1582,10 +1582,8 @@ pager_file::puts (const char *linebuffer) if (linebuffer =3D=3D 0) return; =20 - /* Don't do any filtering if it is disabled. */ - if (!pagination_enabled - || pagination_disabled_for_command - || batch_flag + /* Don't do any filtering or wrapping if both are disabled. */ + if (batch_flag || (lines_per_page =3D=3D UINT_MAX && chars_per_line =3D=3D UINT_MAX) || top_level_interpreter () =3D=3D NULL || top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()) @@ -1613,8 +1611,9 @@ pager_file::puts (const char *linebuffer) /* 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 >=3D lines_per_page - 1) - && !pagination_disabled_for_command) + if (pagination_enabled + && !pagination_disabled_for_command + && lines_printed >=3D lines_per_page - 1) prompt_for_continue (); =20 while (*lineptr && *lineptr !=3D '\n') @@ -1689,8 +1688,9 @@ pager_file::puts (const char *linebuffer) /* 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 >=3D lines_per_page - 1 - && !pagination_disabled_for_command) + if (pagination_enabled + && !pagination_disabled_for_command + && lines_printed >=3D lines_per_page - 1) { prompt_for_continue (); did_paginate =3D true; @@ -1744,6 +1744,41 @@ pager_file::write (const char *buf, long length_buf) this->puts (str.c_str ()); } =20 +#if GDB_SELF_TEST + +/* Test that disabling the pager does not also disable word + wrapping. */ + +static void +test_pager () +{ + string_file *strfile =3D new string_file (); + pager_file pager (strfile); + + /* Make sure the pager is disabled. */ + scoped_restore save_enabled + =3D make_scoped_restore (&pagination_enabled, false); + scoped_restore save_disabled + =3D make_scoped_restore (&pagination_disabled_for_command, false); + scoped_restore save_batch + =3D make_scoped_restore (&batch_flag, false); + scoped_restore save_lines + =3D make_scoped_restore (&lines_per_page, 50); + /* Make it easy to word wrap. */ + scoped_restore save_chars + =3D make_scoped_restore (&chars_per_line, 15); + scoped_restore save_printed + =3D make_scoped_restore (&chars_printed, 0); + + pager.puts ("aaaaaaaaaaaa"); + pager.wrap_here (2); + pager.puts ("bbbbbbbbbbbb\n"); + + SELF_CHECK (strfile->string () =3D=3D "aaaaaaaaaaaa\n bbbbbbbbbbbb\n"); +} + +#endif /* GDB_SELF_TEST */ + void gdb_puts (const char *linebuffer, struct ui_file *stream) { @@ -3696,5 +3731,6 @@ When set, debugging messages will be marked with seco= nds and microseconds."), selftests::register_test ("gdb_argv_array_view", gdb_argv_as_array_view_= test); selftests::register_test ("strncmp_iw_with_mode", strncmp_iw_with_mode_tests); + selftests::register_test ("pager", test_pager); #endif }