aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2022-04-14 11:52:37 +0200
committerGitHub <noreply@github.com>2022-04-14 11:52:37 +0200
commitcd99d3a5470273fe7c62592a4dfadb6a44d09f32 (patch)
tree555d79426dc3f09a16b71495eac50cb9ce7b24da
parentdocs(changelog): copy message improvement (diff)
downloadsl0ppij-cd99d3a5470273fe7c62592a4dfadb6a44d09f32.tar.gz
sl0ppij-cd99d3a5470273fe7c62592a4dfadb6a44d09f32.tar.xz
sl0ppij-cd99d3a5470273fe7c62592a4dfadb6a44d09f32.zip
fix(compatibility): various ansi fixes (#1324)
* fix(compatibility): rotate scroll region up properly * fix(compatibility): rotate scroll region down properly * style(fmt): rustfmt
-rw-r--r--zellij-server/src/panes/grid.rs19
-rw-r--r--zellij-server/src/panes/unit/grid_tests.rs34
-rw-r--r--zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_s.snap57
-rw-r--r--zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_t.snap57
4 files changed, 161 insertions, 6 deletions
diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs
index 320308e2..b74966f3 100644
--- a/zellij-server/src/panes/grid.rs
+++ b/zellij-server/src/panes/grid.rs
@@ -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))))
{
+ 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 {
- 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);
- }
+ 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
}
diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs
index 2790c585..b0e00f9a 100644
--- a/zellij-server/src/panes/unit/grid_tests.rs
+++ b/zellij-server/src/panes/unit/grid_tests.rs
@@ -1708,6 +1708,40 @@ pub fn scroll_down_ansi() {
}
#[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();
let mut grid = Grid::new(
diff --git a/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_s.snap b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_s.snap
new file mode 100644
index 00000000..418f64bf
--- /dev/null
+++ b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_s.snap
@@ -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):
+
diff --git a/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_t.snap b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_t.snap
new file mode 100644
index 00000000..125d3634
--- /dev/null
+++ b/zellij-server/src/panes/unit/snapshots/zellij_server__panes__grid__grid_tests__ansi_capital_t.snap
@@ -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):
+