diff options
author | Hannes Domani <ssbssa@yahoo.de> | 2019-03-18 14:25:59 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2019-03-18 14:25:59 +0000 |
commit | 647bb750c298bbee618aa4448a30dcf9adf23602 (patch) | |
tree | cdaedc2d31b77d1daa8400cd5ef894f6c57cb4bb | |
parent | bff8c71fd8dece639e69b399883f90b3404a2a48 (diff) | |
download | gdb-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/ChangeLog | 5 | ||||
-rw-r--r-- | 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); } |