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 /gdb/tui | |
parent | bff8c71fd8dece639e69b399883f90b3404a2a48 (diff) | |
download | fsf-binutils-gdb-647bb750c298bbee618aa4448a30dcf9adf23602.zip fsf-binutils-gdb-647bb750c298bbee618aa4448a30dcf9adf23602.tar.gz fsf-binutils-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.
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-source.c | 30 |
1 files changed, 20 insertions, 10 deletions
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); } |