Re: [RFC 8.3 0/3] Some style fixes

Hannes Domani via gdb-patches
2019-03-12T17:09:15Z

[-- Attachment #1: Type: text/plain, Size: 1260 bytes --]

Am Dienstag, 12. März 2019, 17:48:12 MEZ hat Tom Tromey <tom@tromey.com> Folgendes geschrieben:

> >>>>> "Hannes" == Hannes Domani via gdb-patches <gdb-patches@sourceware.org> writes:
>
> Hannes> 1) Outside of TUI, escaped characters (< 040 and 0177) aren't handled correctly any more when
> Hannes> list'ing some source code, resulting in an endless loop.
> Hannes> See print_source_lines_base(), I just added "++iter" in the last 2 if() blocks, that fixed it for me.
>
> Hannes> 2) In TUI, scrolling right with the arrow keys, the first keypress doesn't do anything.
> Hannes> (that's just a very minor nuisance)
>
> Hannes> 3) Again in TUI, scrolling right handles TABS and escaped characters as single characters,
> Hannes> which just looks weird.
>
> Thanks, I will take a look at these.
>
> I suspect #2 is the nonl problem.  Could you try the patch I sent in
> another branch of this thread?

No, applying that doesn't fix this.
In copy_source_line() it checks if (column < first_col), and because of the ++column directly
before, it basically starts with 1 instead of 0.

Attached is a patch that fixes most of 2) and 3), but I ignored the handling of escaped
characters, because I just don't have them in any of my sources.

[-- Attachment #2: 0001-Fix-scrolling-right-in-TUI.patch --]
[-- Type: application/octet-stream, Size: 1500 bytes --]

From 02b18ad0da85fd0ec6082b5c8e31a3f98fc8a5b0 Mon Sep 17 00:00:00 2001
From: Hannes Domani <ssbssa@yahoo.de>
Date: Sat, 9 Mar 2019 15:30:07 +0100
Subject: [PATCH] Fix scrolling right in TUI.

---
gdb/tui/tui-source.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index 63e752cd04..142ce86338 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -73,8 +73,21 @@ copy_source_line (const char **ptr, int line_no, int first_col,
++column;
/* We have to process all the text in order to pick up all the
escapes. */
- if (column < first_col || column > first_col + line_width)
- continue;
+ if (column <= first_col || column > first_col + line_width)
+ {
+ if (c == '\t')
+ {
+ int j, max_tab_len = tui_tab_width;
+
+ --column;
+ for (j = column % max_tab_len;
+ j < max_tab_len && column < first_col + line_width;
+ column++, j++)
+ if (column >= first_col)
+ result.push_back (' ');
+ }
+ continue;
+ }

if (c == '\n' || c == '\r' || c == '\0')
{
@@ -94,7 +107,8 @@ copy_source_line (const char **ptr, int line_no, int first_col,
{
int j, max_tab_len = tui_tab_width;

- for (j = column - ((column / max_tab_len) * max_tab_len);
+ --column;
+ for (j = column % max_tab_len;
j < max_tab_len && column < first_col + line_width;
column++, j++)
result.push_back (' ');
--
2.15.1.windows.2