Fix scrolling right in the TUI
authorHannes Domani <ssbssa@yahoo.de>
Mon, 18 Mar 2019 14:29:43 +0000 (14:29 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 18 Mar 2019 14:29:43 +0000 (14:29 +0000)
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.

gdb/ChangeLog
gdb/tui/tui-source.c

index b195fa4..3c8af3d 100644 (file)
@@ -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-17  Eli Zaretskii  <eliz@gnu.org>
 
        * tui/tui-winsource.c (tui_set_is_exec_point_at): Call
index 7cc3c00..1fa0e98 100644 (file)
@@ -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);
     }