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.
This commit is contained in:
Hannes Domani 2019-03-18 14:25:59 +00:00 committed by Pedro Alves
parent bff8c71fd8
commit 647bb750c2
2 changed files with 25 additions and 10 deletions

View 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-18 Tom Tromey <tromey@adacore.com>
* ada-lang.c (empty_array): Add "high" parameter.

View 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);
}