aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Domani <ssbssa@yahoo.de>2019-03-18 14:25:59 +0000
committerPedro Alves <palves@redhat.com>2019-03-18 14:25:59 +0000
commit647bb750c298bbee618aa4448a30dcf9adf23602 (patch)
treecdaedc2d31b77d1daa8400cd5ef894f6c57cb4bb
parentbff8c71fd8dece639e69b399883f90b3404a2a48 (diff)
downloadgdb-647bb750c298bbee618aa4448a30dcf9adf23602.zip
gdb-647bb750c298bbee618aa4448a30dcf9adf23602.tar.gz
gdb-647bb750c298bbee618aa4448a30dcf9adf23602.tar.bz2
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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/tui/tui-source.c30
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);
}