diff options
| author | Aram Drevekenin <aram@poor.dev> | 2021-04-16 17:20:51 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-16 17:20:51 +0200 |
| commit | 475c2db4be67ace5cde05ca386afe470b1f36262 (patch) | |
| tree | 2a241a26d747b81483a968a3c93990eaa875843b /src | |
| parent | Stability fixes (#273) (diff) | |
| download | sl0ppij-475c2db4be67ace5cde05ca386afe470b1f36262.tar.gz sl0ppij-475c2db4be67ace5cde05ca386afe470b1f36262.tar.xz sl0ppij-475c2db4be67ace5cde05ca386afe470b1f36262.zip | |
fix(compatibility): properly scroll up in scroll region (#274)
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/panes/grid.rs | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/client/panes/grid.rs b/src/client/panes/grid.rs index 525de39e..950c72de 100644 --- a/src/client/panes/grid.rs +++ b/src/client/panes/grid.rs @@ -451,9 +451,13 @@ impl Grid { if let Some((scroll_region_top, scroll_region_bottom)) = self.scroll_region { for _ in 0..count { let columns = vec![EMPTY_TERMINAL_CHARACTER; self.width]; - self.viewport.remove(scroll_region_bottom); - self.viewport - .insert(scroll_region_top, Row::from_columns(columns).canonical()); + if scroll_region_bottom < self.viewport.len() { + self.viewport.remove(scroll_region_bottom); + } + if scroll_region_top < self.viewport.len() { + self.viewport + .insert(scroll_region_top, Row::from_columns(columns).canonical()); + } } } } @@ -462,8 +466,12 @@ impl Grid { for _ in 0..count { let columns = vec![EMPTY_TERMINAL_CHARACTER; self.width]; self.viewport.remove(scroll_region_top); - self.viewport - .insert(scroll_region_bottom, Row::from_columns(columns).canonical()); + if self.viewport.len() > scroll_region_top { + self.viewport + .insert(scroll_region_bottom, Row::from_columns(columns).canonical()); + } else { + self.viewport.push(Row::from_columns(columns).canonical()); + } } } } @@ -1060,6 +1068,7 @@ impl vte::Perform for Grid { if line_count >= 0 { self.rotate_scroll_region_up(line_count as usize); } else { + // TODO: can this actually happen? self.rotate_scroll_region_down(line_count.abs() as usize); } } else if c == 'S' { @@ -1069,10 +1078,7 @@ impl vte::Perform for Grid { } else { params[0] as usize }; - let pad_character = EMPTY_TERMINAL_CHARACTER; - self.delete_lines_in_scroll_region(count, pad_character); - // TODO: since delete_lines_in_scroll_region also adds lines, is the below redundant? - self.add_empty_lines_in_scroll_region(count, pad_character); + self.rotate_scroll_region_down(count); } else if c == '@' { let count = if params[0] == 0 { 1 |
