This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix scrolling right in the TUI


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=647bb750c298bbee618aa4448a30dcf9adf23602

commit 647bb750c298bbee618aa4448a30dcf9adf23602
Author: Hannes Domani <ssbssa@yahoo.de>
Date:   Mon Mar 18 14:25:59 2019 +0000

    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:
    2019-03-18  Hannes Domani  <ssbssa@yahoo.de>
    
    	* tui/tui-source.c (copy_source_line): Fix handling of 'column'.
    	Handle tabs.

Diff:
---
 gdb/ChangeLog        |  5 +++++
 gdb/tui/tui-source.c | 30 ++++++++++++++++++++----------
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 10e39bb..75d82db 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2019-03-18  Hannes Domani  <ssbssa@yahoo.de>
+
+	* tui/tui-source.c (copy_source_line): Fix handling of 'column'.
+	Handle tabs.
+
 2019-03-18  Tom Tromey  <tromey@adacore.com>
 
 	* ada-lang.c (empty_array): Add "high" parameter.
diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index 7cc3c00..1fa0e98 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);
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]