aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-04-26 05:31:36 -0400
committerJesse Luehrs <doy@tozt.net>2016-04-26 05:31:36 -0400
commit2a7896d40b13022fff084c551a52bd3f32a90935 (patch)
treebc079c7c356b659a63c59d198eb0d8c59b2f5cc0
parent60a7ec2ecf621ebb6f3376f71b27cdc61d7fc5a1 (diff)
downloadvt100-rust-2a7896d40b13022fff084c551a52bd3f32a90935.tar.gz
vt100-rust-2a7896d40b13022fff084c551a52bd3f32a90935.zip
set_window_size and set_scrollback_length
-rw-r--r--src/ffi.rs10
-rw-r--r--src/screen.rs10
-rw-r--r--tests/basic.rs11
3 files changed, 31 insertions, 0 deletions
diff --git a/src/ffi.rs b/src/ffi.rs
index 47281ba..1b984b5 100644
--- a/src/ffi.rs
+++ b/src/ffi.rs
@@ -22,6 +22,16 @@ extern "C" {
outlen: *mut libc::size_t,
);
+ pub fn vt100_screen_set_window_size(
+ screen: *mut types::ScreenImpl,
+ rows: libc::c_int,
+ cols: libc::c_int,
+ );
+ pub fn vt100_screen_set_scrollback_length(
+ screen: *mut types::ScreenImpl,
+ rows: libc::c_int,
+ );
+
pub fn vt100_wrapper_rows(screen: *mut types::ScreenImpl) -> libc::c_int;
pub fn vt100_wrapper_cols(screen: *mut types::ScreenImpl) -> libc::c_int;
}
diff --git a/src/screen.rs b/src/screen.rs
index 296f2dc..69eb6f1 100644
--- a/src/screen.rs
+++ b/src/screen.rs
@@ -24,6 +24,16 @@ impl Screen {
unsafe { ffi::vt100_wrapper_cols(screen_impl) }
}
+ pub fn set_window_size(&self, rows: i32, cols: i32) {
+ let Screen(screen_impl) = *self;
+ unsafe { ffi::vt100_screen_set_window_size(screen_impl, rows, cols) };
+ }
+
+ pub fn set_scrollback_length(&self, rows: i32) {
+ let Screen(screen_impl) = *self;
+ unsafe { ffi::vt100_screen_set_scrollback_length(screen_impl, rows) };
+ }
+
pub fn process(&mut self, s: &str) -> u64 {
let Screen(screen_impl) = *self;
unsafe {
diff --git a/tests/basic.rs b/tests/basic.rs
index 739b75c..ec3a8d7 100644
--- a/tests/basic.rs
+++ b/tests/basic.rs
@@ -14,4 +14,15 @@ mod tests {
screen.process(input);
assert_eq!(screen.window_contents(0, 0, 0, 50), "foobar\n");
}
+
+ #[test]
+ fn set_window_size() {
+ let screen = vt100::Screen::new(24, 80);
+ assert_eq!(screen.rows(), 24);
+ assert_eq!(screen.cols(), 80);
+
+ screen.set_window_size(34, 8);
+ assert_eq!(screen.rows(), 34);
+ assert_eq!(screen.cols(), 8);
+ }
}