From patchwork Thu Mar 14 20:58:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 31856 Received: (qmail 112366 invoked by alias); 14 Mar 2019 20:58:42 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 112313 invoked by uid 89); 14 Mar 2019 20:58:42 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 spammy=arrow, U*ssbssa, ssbssa@yahoo.de, TABS X-HELO: mail-wr1-f66.google.com Received: from mail-wr1-f66.google.com (HELO mail-wr1-f66.google.com) (209.85.221.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 14 Mar 2019 20:58:40 +0000 Received: by mail-wr1-f66.google.com with SMTP id t5so7373104wri.7 for ; Thu, 14 Mar 2019 13:58:40 -0700 (PDT) Return-Path: Received: from ?IPv6:2001:8a0:f913:f700:56ee:75ff:fe8d:232b? ([2001:8a0:f913:f700:56ee:75ff:fe8d:232b]) by smtp.gmail.com with ESMTPSA id g15sm258516wmg.16.2019.03.14.13.58.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Mar 2019 13:58:37 -0700 (PDT) Subject: [PATCH] Fix scrolling right in the TUI (Re: [RFC 8.3 0/3] Some style fixes) To: Eli Zaretskii , Hannes Domani , Tom Tromey References: <20190308210433.32683-1-tromey@adacore.com> <1828778750.3318305.1552141698307@mail.yahoo.com> <87o96g3upj.fsf@tromey.com> <375483967.6114402.1552410513314@mail.yahoo.com> <83lg1i3hkj.fsf@gnu.org> Cc: gdb-patches@sourceware.org From: Pedro Alves Message-ID: <5bb1d8b6-1ee9-3c2b-7a03-224657e2287f@redhat.com> Date: Thu, 14 Mar 2019 20:58:36 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <83lg1i3hkj.fsf@gnu.org> On 03/13/2019 03:44 PM, Eli Zaretskii wrote: >> Date: Tue, 12 Mar 2019 17:08:33 +0000 (UTC) >> From: "Hannes Domani via gdb-patches" >> >> 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. > I can confirm that this patch fixes the problems with horizontal > scrolling, with or without TAB characters in the sources. I think we > should push it. I agree. Hannes, I've written a git commit log entry, as well as a ChangeLog entry for you. Please double-check whether I didn't make some mistake. I've made one change in the patch, here: On 03/12/2019 05:08 PM, Hannes Domani via gdb-patches wrote: > + 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; > + } instead of duplicating that code, I'd put it in a lambda and use it in both places. Tromey, WDYT? Would you prefer the version without the lambda? From 3b88b2cebb2d8697fbbcf957e587440ee2a4968c Mon Sep 17 00:00:00 2001 From: Hannes Domani Date: Thu, 14 Mar 2019 20:46:27 +0000 Subject: [PATCH] Fix scrolling right in the TUI This commit fixes two issues in scrolling right in the TUI: #1 - Scrolling right with the arrow keys, the first keypress doesn't do anything. The problem is that copy_source_line() checks if (column < first_col), and because of the ++column directly before, it basically starts with 1 instead of 0. #2 - Scrolling right handles TABS and escaped characters as single characters, which just looks weird. The problem is that there's a spot that misses handling TABS. gdb/ChangeLog: yyyy-mm-dd Hannes Domani * tui/tui-source.c (copy_source_line): Fix handling of 'column'. Handle tabs. --- gdb/tui/tui-source.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 7cc3c00069..1fa0e986e0 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -71,10 +71,27 @@ copy_source_line (const char **ptr, int line_no, int first_col, ++lineptr; ++column; + + auto process_tab = [&] () + { + int max_tab_len = tui_tab_width; + + --column; + for (int j = column % max_tab_len; + j < max_tab_len && column < first_col + line_width; + column++, j++) + if (column >= first_col) + result.push_back (' '); + }; + /* 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') + process_tab (); + continue; + } if (c == '\n' || c == '\r' || c == '\0') { @@ -91,14 +108,7 @@ copy_source_line (const char **ptr, int line_no, int first_col, result.push_back ('?'); } else if (c == '\t') - { - int j, max_tab_len = tui_tab_width; - - for (j = column - ((column / max_tab_len) * max_tab_len); - j < max_tab_len && column < first_col + line_width; - column++, j++) - result.push_back (' '); - } + process_tab (); else result.push_back (c); }