From abbc965bc094f95f4754caf2fcca840fd1f0a781 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 12 Nov 2019 08:36:55 -0500 Subject: actually resize the underlying grid when requested --- CHANGELOG.md | 8 ++++++++ src/grid.rs | 8 ++++++++ tests/basic.rs | 14 ++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c23c2e..95c6a0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## Unreleased + +### Fixed + +* `Screen::set_size` now actually resizes when requested (previously the + underlying storage was not being resized, leading to panics when writing + outside of the original screen). + ## [0.5.0] - 2019-11-12 ### Added diff --git a/src/grid.rs b/src/grid.rs index 2705834..80d44ba 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -60,7 +60,15 @@ impl Grid { } } + if self.scroll_bottom == self.size.rows - 1 { + self.scroll_bottom = size.rows - 1; + } + self.size = size; + for row in &mut self.rows { + row.resize(size.cols as usize, crate::cell::Cell::default()); + } + self.rows.resize(size.rows as usize, self.new_row()); if self.scroll_bottom >= size.rows { self.scroll_bottom = size.rows - 1; diff --git a/tests/basic.rs b/tests/basic.rs index 33a272d..4eec69b 100644 --- a/tests/basic.rs +++ b/tests/basic.rs @@ -56,6 +56,20 @@ fn set_size() { parser.set_size(34, 8); assert_eq!(parser.screen().contents(), "01234567\n89012345\n6789"); + + let mut parser = vt100::Parser::default(); + assert_eq!(parser.screen().size(), (24, 80)); + parser.set_size(30, 100); + assert_eq!(parser.screen().size(), (30, 100)); + parser.process(b"\x1b[75Cfoobar"); + assert_eq!(parser.screen().contents(), " foobar"); + + let mut parser = vt100::Parser::default(); + assert_eq!(parser.screen().size(), (24, 80)); + parser.set_size(30, 100); + assert_eq!(parser.screen().size(), (30, 100)); + parser.process(b"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\x1b[24;99Hfoobar"); + assert_eq!(parser.screen().contents(), "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24 foobar"); } #[test] -- cgit v1.2.3