aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2023-03-08 21:21:24 -0500
committerJesse Luehrs <doy@tozt.net>2023-03-09 00:13:52 -0500
commite5bdee42da0cf6f74db46fca4bcc6c6a32c7a639 (patch)
tree78b14e8cb11e27563d91e1de46be70a1fec75bc1
parent4c9e5da3de10d838d792929f1691024d6bf59c85 (diff)
downloadvt100-rust-e5bdee42da0cf6f74db46fca4bcc6c6a32c7a639.tar.gz
vt100-rust-e5bdee42da0cf6f74db46fca4bcc6c6a32c7a639.zip
allow getting a mutable screen, and move some operations there
-rw-r--r--CHANGELOG.md8
-rw-r--r--src/parser.rs27
-rw-r--r--src/screen.rs21
-rw-r--r--tests/basic.rs18
-rw-r--r--tests/scroll.rs20
5 files changed, 50 insertions, 44 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0047edb..51a7f97 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## [Unreleased]
+
+### Changed
+
+* `Parser::set_size` and `Parser::set_scrollback` have been moved to methods
+ on `Screen`, and `Parser::screen_mut` was added to get a mutable reference
+ to the screen.
+
## [0.15.2] - 2023-02-05
### Changed
diff --git a/src/parser.rs b/src/parser.rs
index 26431ac..673e0d9 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -27,32 +27,19 @@ impl Parser {
}
}
- /// Resizes the terminal.
- pub fn set_size(&mut self, rows: u16, cols: u16) {
- self.screen.set_size(rows, cols);
- }
-
- /// Scrolls to the given position in the scrollback.
- ///
- /// This position indicates the offset from the top of the screen, and
- /// should be `0` to put the normal screen in view.
- ///
- /// This affects the return values of methods called on `parser.screen()`:
- /// for instance, `parser.screen().cell(0, 0)` will return the top left
- /// corner of the screen after taking the scrollback offset into account.
- /// It does not affect `parser.process()` at all.
- ///
- /// The value given will be clamped to the actual size of the scrollback.
- pub fn set_scrollback(&mut self, rows: usize) {
- self.screen.set_scrollback(rows);
- }
-
/// Returns a reference to a `Screen` object containing the terminal
/// state.
#[must_use]
pub fn screen(&self) -> &crate::screen::Screen {
&self.screen
}
+
+ /// Returns a mutable reference to a `Screen` object containing the
+ /// terminal state.
+ #[must_use]
+ pub fn screen_mut(&mut self) -> &mut crate::screen::Screen {
+ &mut self.screen
+ }
}
impl Default for Parser {
diff --git a/src/screen.rs b/src/screen.rs
index a50671f..cc89c20 100644
--- a/src/screen.rs
+++ b/src/screen.rs
@@ -110,7 +110,8 @@ impl Screen {
}
}
- pub(crate) fn set_size(&mut self, rows: u16, cols: u16) {
+ /// Resizes the terminal.
+ pub fn set_size(&mut self, rows: u16, cols: u16) {
self.grid.set_size(crate::grid::Size { rows, cols });
self.alternate_grid
.set_size(crate::grid::Size { rows, cols });
@@ -125,6 +126,20 @@ impl Screen {
(size.rows, size.cols)
}
+ /// Scrolls to the given position in the scrollback.
+ ///
+ /// This position indicates the offset from the top of the screen, and
+ /// should be `0` to put the normal screen in view.
+ ///
+ /// This affects the return values of methods called on the screen: for
+ /// instance, `screen.cell(0, 0)` will return the top left corner of the
+ /// screen after taking the scrollback offset into account.
+ ///
+ /// The value given will be clamped to the actual size of the scrollback.
+ pub fn set_scrollback(&mut self, rows: usize) {
+ self.grid_mut().set_scrollback(rows);
+ }
+
/// Returns the current position in the scrollback.
///
/// This position indicates the offset from the top of the screen, and is
@@ -134,10 +149,6 @@ impl Screen {
self.grid().scrollback()
}
- pub(crate) fn set_scrollback(&mut self, rows: usize) {
- self.grid_mut().set_scrollback(rows);
- }
-
/// Returns the text contents of the terminal.
///
/// This will not include any formatting information, and will be in plain
diff --git a/tests/basic.rs b/tests/basic.rs
index 477154b..3424578 100644
--- a/tests/basic.rs
+++ b/tests/basic.rs
@@ -18,18 +18,18 @@ fn set_size() {
assert_eq!(parser.screen().size(), (24, 80));
assert_eq!(parser.screen().cursor_position(), (0, 0));
- parser.set_size(34, 8);
+ parser.screen_mut().set_size(34, 8);
assert_eq!(parser.screen().size(), (34, 8));
assert_eq!(parser.screen().cursor_position(), (0, 0));
parser.process(b"\x1b[30;5H");
assert_eq!(parser.screen().cursor_position(), (29, 4));
- parser.set_size(24, 80);
+ parser.screen_mut().set_size(24, 80);
assert_eq!(parser.screen().size(), (24, 80));
assert_eq!(parser.screen().cursor_position(), (23, 4));
- parser.set_size(34, 8);
+ parser.screen_mut().set_size(34, 8);
assert_eq!(parser.screen().size(), (34, 8));
assert_eq!(parser.screen().cursor_position(), (23, 4));
@@ -37,7 +37,7 @@ fn set_size() {
assert_eq!(parser.screen().size(), (34, 8));
assert_eq!(parser.screen().cursor_position(), (0, 0));
- parser.set_size(24, 80);
+ parser.screen_mut().set_size(24, 80);
assert_eq!(parser.screen().size(), (24, 80));
assert_eq!(parser.screen().cursor_position(), (0, 0));
@@ -45,26 +45,26 @@ fn set_size() {
assert_eq!(parser.screen().size(), (24, 80));
assert_eq!(parser.screen().cursor_position(), (23, 4));
- parser.set_size(34, 8);
+ parser.screen_mut().set_size(34, 8);
parser.process(b"\x1bc01234567890123456789");
assert_eq!(parser.screen().contents(), "01234567890123456789");
- parser.set_size(24, 80);
+ parser.screen_mut().set_size(24, 80);
assert_eq!(parser.screen().contents(), "01234567\n89012345\n6789");
- parser.set_size(34, 8);
+ parser.screen_mut().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);
+ parser.screen_mut().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);
+ parser.screen_mut().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");
diff --git a/tests/scroll.rs b/tests/scroll.rs
index 21e0ae6..16bd42c 100644
--- a/tests/scroll.rs
+++ b/tests/scroll.rs
@@ -20,31 +20,31 @@ fn scrollback() {
parser.process(b"\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30");
assert_eq!(parser.screen().contents(), "7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30");
- parser.set_scrollback(0);
+ parser.screen_mut().set_scrollback(0);
assert_eq!(parser.screen().scrollback(), 0);
assert_eq!(parser.screen().contents(), "7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30");
- parser.set_scrollback(1);
+ parser.screen_mut().set_scrollback(1);
assert_eq!(parser.screen().scrollback(), 1);
assert_eq!(parser.screen().contents(), "6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29");
- parser.set_scrollback(3);
+ parser.screen_mut().set_scrollback(3);
assert_eq!(parser.screen().scrollback(), 3);
assert_eq!(parser.screen().contents(), "4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27");
- parser.set_scrollback(6);
+ parser.screen_mut().set_scrollback(6);
assert_eq!(parser.screen().scrollback(), 6);
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");
- parser.set_scrollback(7);
+ parser.screen_mut().set_scrollback(7);
assert_eq!(parser.screen().scrollback(), 6);
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");
- parser.set_scrollback(0);
+ parser.screen_mut().set_scrollback(0);
assert_eq!(parser.screen().scrollback(), 0);
assert_eq!(parser.screen().contents(), "7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30");
- parser.set_scrollback(7);
+ parser.screen_mut().set_scrollback(7);
assert_eq!(parser.screen().scrollback(), 6);
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");
@@ -72,11 +72,11 @@ fn scrollback() {
assert_eq!(parser.screen().scrollback(), 10);
assert_eq!(parser.screen().contents(), "3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26");
- parser.set_scrollback(12);
+ parser.screen_mut().set_scrollback(12);
assert_eq!(parser.screen().scrollback(), 10);
assert_eq!(parser.screen().contents(), "3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26");
- parser.set_scrollback(0);
+ parser.screen_mut().set_scrollback(0);
assert_eq!(parser.screen().scrollback(), 0);
assert_eq!(parser.screen().contents(), "13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36");
@@ -84,7 +84,7 @@ fn scrollback() {
assert_eq!(parser.screen().scrollback(), 0);
assert_eq!(parser.screen().contents(), "15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38");
- parser.set_scrollback(5);
+ parser.screen_mut().set_scrollback(5);
assert_eq!(parser.screen().scrollback(), 5);
assert_eq!(parser.screen().contents(), "10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33");