diff options
author | Jesse Luehrs <doy@tozt.net> | 2023-03-08 23:43:23 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2023-03-09 00:29:47 -0500 |
commit | 68c36be2e26813a2a3d7210ae82824de06b3d3ee (patch) | |
tree | 19f345f7e05c6cb8c210657e6f0f671113f56f09 /src/state.rs | |
parent | a705c1f07de2b8ec3ba4fe46377242f151b996c1 (diff) | |
download | vt100-rust-68c36be2e26813a2a3d7210ae82824de06b3d3ee.tar.gz vt100-rust-68c36be2e26813a2a3d7210ae82824de06b3d3ee.zip |
implement callback for terminal resize request
Diffstat (limited to 'src/state.rs')
-rw-r--r-- | src/state.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/state.rs b/src/state.rs index c84fa2b..5471bdd 100644 --- a/src/state.rs +++ b/src/state.rs @@ -42,6 +42,20 @@ impl<'a, T: crate::callbacks::Callbacks> vte::Perform for State<'a, T> { ignore: bool, c: char, ) { + if intermediates.first().is_none() && c == 't' { + let mut iter = params.iter(); + let op = iter.next().and_then(|x| x.first().copied()); + if op == Some(8) { + let (screen_rows, screen_cols) = self.screen.size(); + let rows = iter.next().map_or(screen_rows, |x| { + *x.first().unwrap_or(&screen_rows) + }); + let cols = iter.next().map_or(screen_cols, |x| { + *x.first().unwrap_or(&screen_cols) + }); + self.callbacks.resize(self.screen, (rows, cols)); + } + } self.screen.csi_dispatch(params, intermediates, ignore, c); } |