From: Tom de Vries <tdevries@suse.de>
To: Andrew Burgess <aburgess@redhat.com>, gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: Re: [PATCH] [gdb/tui] Make tui compact-source more compact
Date: Wed, 10 May 2023 17:09:51 +0200 [thread overview]
Message-ID: <a69a360f-07b8-6984-bc8e-64d5769f89c9@suse.de> (raw)
In-Reply-To: <87jzxg7e4b.fsf@redhat.com>
On 5/10/23 11:03, Andrew Burgess wrote:
> Tom de Vries via Gdb-patches <gdb-patches@sourceware.org> writes:
>
>> I noticed with tui compact-source on, that when reducing the height of the
>> src window we go from:
>> ...
>> |___09_ i++; |
>> |___10_ i++; |
>> +--------------------------------------+
>> ...
>> to:
>> ...
>> |___09_ i++; |
>> +--------------------------------------+
>> ...
>> In other words, the digits used to print 9 remains 2, even though only 1 is
>> needed.
>
> The benefit of using two digits here is that as we scroll down, and
> lines 10+ appear on the screen, the source code doesn't move 1 character
> to the right. This will happen again when line 100 appears.
>
> The docs (as you quoted in commit 2093c2af3c58) say:
>
> The default display uses more space for line numbers and starts the
> source text at the next tab stop; the compact display uses only as
> much space as is needed for the line numbers in the current file, and
> only a single space to separate the line numbers from the source.
>
> So the '09' is the expected behaviour for a file with a double digit
> number of lines.
>
Thanks for pointing that out, somehow I read over that.
> I think I prefer the original behaviour -- your change certainly makes
> sense when looking at a pretty small src window, at a pretty small file,
> but this feels like an edge case.
>
> That said, I don't feel strongly enough to block the change if you
> really want to see it merged -- but you'll need to update the docs.
>
Ack, but now that you've pointed out how this is supposed to work, I'm
fine with keeping the documented behaviour. At it happens, it's not
current behaviour, and I've submitted a patch to fix that, using your
suggested change below here (
https://sourceware.org/pipermail/gdb-patches/2023-May/199470.html ).
>>
>> This is due to this line in tui_source_window::set_contents:
>> ...
>> int max_line_nr = std::max (lines_in_file, last_line_nr_in_window);
>
> That line is not correct I think. Better would be something like:
>
> int max_line_nr = lines_in_file + nlines - 1;
>
> this accounts for that at the limit we can scroll such that only the
> last line of the source file is displayed, then the rest of the source
> window can also have line numbers assigned. A source file with 9 lines
> will (currently) still see a source shift as the (empty) line 10 appears.
>
>> ...
>> which takes both the last line in the window and the total lines in the source
>> file into account.
>>
>> Make "tui compact-source" more compact by just using:
>> ...
>> int max_line_nr = last_line_nr_in_window;
>> ...
>> such that we have:
>> ...
>> |___9_ i++; |
>> +--------------------------------------+
>> ...
>>
>> Tested on x86_64-linux.
>> ---
>> gdb/testsuite/gdb.tui/compact-source-2.exp | 68 ++++++++++++++++++++++
>> gdb/tui/tui-source.c | 3 +-
>> 2 files changed, 69 insertions(+), 2 deletions(-)
>> create mode 100644 gdb/testsuite/gdb.tui/compact-source-2.exp
>>
>> diff --git a/gdb/testsuite/gdb.tui/compact-source-2.exp b/gdb/testsuite/gdb.tui/compact-source-2.exp
>> new file mode 100644
>> index 00000000000..416c76e1d26
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.tui/compact-source-2.exp
>> @@ -0,0 +1,68 @@
>> +# Copyright 2023 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
>> +
>> +# Check that "set tui compact-source on" has the intended effect.
>
> This comment will be true once the docs have changed.
>
>> +
>> +require allow_tui_tests
>> +
>> +tuiterm_env
>> +
>> +standard_testfile
>> +
>> +# Let's generate the source file. We want a short file, with more than 10
>> +# lines, but with the first line in main below 10.
>> +set src_list \
>> + [list \
>> + "int" \
>> + "main (void)" \
>> + "{" \
>> + " int i = 1;" \
>> + " i++;" \
>> + " i++;" \
>> + " i++;" \
>> + " i++;" \
>> + " i++;" \
>> + " return 0;" \
>> + "}"]
>> +set line_four [lindex $src_list 3]
>> +set src_txt [join $src_list "\n"]
>> +set srcfile [standard_output_file $srcfile]
>> +set fd [open $srcfile w]
>> +puts $fd $src_txt
>> +close $fd
>> +
>> +if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} {
>> + return -1
>> +}
>> +
>> +Term::clean_restart 17 80 $binfile
>> +
>> +gdb_test_no_output "maint set tui-left-margin-verbose on"
>> +gdb_test_no_output "set tui compact-source on"
>> +
>> +if {![Term::enter_tui]} {
>> + unsupported "TUI not supported"
>> + return
>> +}
>> +
>> +set re_border "\\|"
>> +Term::check_contents "compact source format" \
>> + "${re_border}___04_$line_four *$re_border"
>> +
>> +with_test_prefix window-resize=1 {
>
> Minor nit: that prefix doesn't seem to reflect what actually changes
> (height -= 1 vs height == 1).
>
The idea there was that 1 was supposed to be a sequence number rather
than a quantity, but anyway, I'm dropping this patch, and I've used this
suggestion in the update of gdb.tui/compact-source.exp in the patch
mentioned above.
Thanks,
- Tom
> Thanks,
> Andrew
>
>
>> + Term::command "wh src -1"
>> + Term::check_contents "compact source" \
>> + "${re_border}___4_$line_four *$re_border"
>> +}
>> diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
>> index 1233e945cab..bef3d3163dd 100644
>> --- a/gdb/tui/tui-source.c
>> +++ b/gdb/tui/tui-source.c
>> @@ -79,9 +79,8 @@ tui_source_window::set_contents (struct gdbarch *arch,
>> {
>> /* Solaris 11+gcc 5.5 has ambiguous overloads of log10, so we
>> cast to double to get the right one. */
>> - int lines_in_file = offsets->size ();
>> int last_line_nr_in_window = line_no + nlines - 1;
>> - int max_line_nr = std::max (lines_in_file, last_line_nr_in_window);
>> + int max_line_nr = last_line_nr_in_window;
>> int digits_needed = 1 + (int)log10 ((double) max_line_nr);
>> int trailing_space = 1;
>> m_digits = digits_needed + trailing_space;
>>
>> base-commit: 2093c2af3c58da1fe63807dfea07d56afc6e7a8a
>> --
>> 2.35.3
>
prev parent reply other threads:[~2023-05-10 15:09 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-10 6:20 Tom de Vries
2023-05-10 9:03 ` Andrew Burgess
2023-05-10 15:09 ` Tom de Vries [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a69a360f-07b8-6984-bc8e-64d5769f89c9@suse.de \
--to=tdevries@suse.de \
--cc=aburgess@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=tom@tromey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).