mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 21:41:47 +08:00
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:

committed by
Pedro Alves

parent
bff8c71fd8
commit
647bb750c2
@ -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>
|
2019-03-18 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
* ada-lang.c (empty_array): Add "high" parameter.
|
* ada-lang.c (empty_array): Add "high" parameter.
|
||||||
|
@ -71,10 +71,27 @@ copy_source_line (const char **ptr, int line_no, int first_col,
|
|||||||
|
|
||||||
++lineptr;
|
++lineptr;
|
||||||
++column;
|
++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
|
/* We have to process all the text in order to pick up all the
|
||||||
escapes. */
|
escapes. */
|
||||||
if (column < first_col || column > first_col + line_width)
|
if (column <= first_col || column > first_col + line_width)
|
||||||
continue;
|
{
|
||||||
|
if (c == '\t')
|
||||||
|
process_tab ();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (c == '\n' || c == '\r' || c == '\0')
|
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 ('?');
|
result.push_back ('?');
|
||||||
}
|
}
|
||||||
else if (c == '\t')
|
else if (c == '\t')
|
||||||
{
|
process_tab ();
|
||||||
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 (' ');
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
result.push_back (c);
|
result.push_back (c);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user