fix(compatibility): various ansi fixes (#1324)

* fix(compatibility): rotate scroll region up properly

* fix(compatibility): rotate scroll region down properly

* style(fmt): rustfmt
This commit is contained in:
Aram Drevekenin 2022-04-14 11:52:37 +02:00 committed by GitHub
parent 6822b9a475
commit cd99d3a547
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 161 additions and 6 deletions

View file

@ -822,12 +822,17 @@ impl Grid {
.scroll_region
.or(Some((0, self.height.saturating_sub(1))))
{
self.pad_lines_until(scroll_region_bottom, EMPTY_TERMINAL_CHARACTER);
for _ in 0..count {
if self.cursor.y >= scroll_region_top && self.cursor.y <= scroll_region_bottom {
self.pad_lines_until(scroll_region_bottom, EMPTY_TERMINAL_CHARACTER);
if self.viewport.get(scroll_region_bottom).is_some() {
self.viewport.remove(scroll_region_bottom);
}
let mut pad_character = EMPTY_TERMINAL_CHARACTER;
pad_character.styles = self.cursor.pending_styles;
let columns = VecDeque::from(vec![pad_character; self.width]);
self.viewport
.insert(scroll_region_top, Row::from_columns(columns).canonical());
}
}
self.output_buffer.update_all_lines(); // TODO: only update scroll region lines
@ -838,12 +843,14 @@ impl Grid {
.scroll_region
.or(Some((0, self.height.saturating_sub(1))))
{
for _ in 0..count {
if self.cursor.y >= scroll_region_top && self.cursor.y <= scroll_region_bottom {
self.pad_lines_until(scroll_region_top, EMPTY_TERMINAL_CHARACTER);
self.viewport.remove(scroll_region_top);
self.pad_lines_until(scroll_region_bottom, EMPTY_TERMINAL_CHARACTER);
}
let mut pad_character = EMPTY_TERMINAL_CHARACTER;
pad_character.styles = self.cursor.pending_styles;
for _ in 0..count {
self.viewport.remove(scroll_region_top);
let columns = VecDeque::from(vec![pad_character; self.width]);
self.viewport
.insert(scroll_region_bottom, Row::from_columns(columns).canonical());
}
self.output_buffer.update_all_lines(); // TODO: only update scroll region lines
}

View file

@ -1707,6 +1707,40 @@ pub fn scroll_down_ansi() {
assert_snapshot!(format!("{:?}", grid));
}
#[test]
pub fn ansi_capital_t() {
let mut vte_parser = vte::Parser::new();
let mut grid = Grid::new(
51,
112,
Palette::default(),
Rc::new(RefCell::new(LinkHandler::new())),
Rc::new(RefCell::new(None)),
);
let content = "foo\u{1b}[14Tbar".as_bytes();
for byte in content {
vte_parser.advance(&mut grid, *byte);
}
assert_snapshot!(format!("{:?}", grid));
}
#[test]
pub fn ansi_capital_s() {
let mut vte_parser = vte::Parser::new();
let mut grid = Grid::new(
51,
112,
Palette::default(),
Rc::new(RefCell::new(LinkHandler::new())),
Rc::new(RefCell::new(None)),
);
let content = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfoo\u{1b}[14Sbar".as_bytes();
for byte in content {
vte_parser.advance(&mut grid, *byte);
}
assert_snapshot!(format!("{:?}", grid));
}
#[test]
fn terminal_pixel_size_reports() {
let mut vte_parser = vte::Parser::new();

View file

@ -0,0 +1,57 @@
---
source: zellij-server/src/panes/./unit/grid_tests.rs
assertion_line: 1741
expression: "format!(\"{:?}\", grid)"
---
00 (C):
01 (C):
02 (C):
03 (C):
04 (C):
05 (C):
06 (C): foo
07 (C):
08 (C):
09 (C):
10 (C):
11 (C):
12 (C):
13 (C):
14 (C):
15 (C):
16 (C):
17 (C):
18 (C):
19 (C):
20 (C): bar
21 (C):
22 (C):
23 (C):
24 (C):
25 (C):
26 (C):
27 (C):
28 (C):
29 (C):
30 (C):
31 (C):
32 (C):
33 (C):
34 (C):
35 (C):
36 (C):
37 (C):
38 (C):
39 (C):
40 (C):
41 (C):
42 (C):
43 (C):
44 (C):
45 (C):
46 (C):
47 (C):
48 (C):
49 (C):
50 (C):

View file

@ -0,0 +1,57 @@
---
source: zellij-server/src/panes/./unit/grid_tests.rs
assertion_line: 1724
expression: "format!(\"{:?}\", grid)"
---
00 (C): bar
01 (C):
02 (C):
03 (C):
04 (C):
05 (C):
06 (C):
07 (C):
08 (C):
09 (C):
10 (C):
11 (C):
12 (C):
13 (C):
14 (C): foo
15 (C):
16 (C):
17 (C):
18 (C):
19 (C):
20 (C):
21 (C):
22 (C):
23 (C):
24 (C):
25 (C):
26 (C):
27 (C):
28 (C):
29 (C):
30 (C):
31 (C):
32 (C):
33 (C):
34 (C):
35 (C):
36 (C):
37 (C):
38 (C):
39 (C):
40 (C):
41 (C):
42 (C):
43 (C):
44 (C):
45 (C):
46 (C):
47 (C):
48 (C):
49 (C):
50 (C):