diff options
author | Christian Duerr <contact@christianduerr.com> | 2020-01-31 22:22:09 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-31 22:22:09 +0000 |
commit | 035c47fb362cc97fb42712e0138c55a7a4d318e4 (patch) | |
tree | 93058b7d6b1ef487b14be993b05cfd719f7cdaa8 | |
parent | 3ccf275e5dd438fc0aeaa000d49a50eb8e4edaa0 (diff) | |
download | r-alacritty-vte-035c47fb362cc97fb42712e0138c55a7a4d318e4.tar.gz r-alacritty-vte-035c47fb362cc97fb42712e0138c55a7a4d318e4.tar.bz2 r-alacritty-vte-035c47fb362cc97fb42712e0138c55a7a4d318e4.zip |
Fix param not resetting between escapes
Fixes #46.
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | src/lib.rs | 39 |
2 files changed, 36 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ffea20c..ffce24e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ CHANGELOG ========= +## [Unreleased] + +- Fix params reset between escapes + ## 0.6.0 - Fix build failure on Rust 1.36.0 @@ -286,9 +286,6 @@ impl Parser { self.ignoring, byte as char, ); - - self.num_params = 0; - self.param = 0; }, Action::EscDispatch => { performer.esc_dispatch(self.params(), self.intermediates(), self.ignoring, byte); @@ -322,13 +319,13 @@ impl Parser { } }, Action::Clear => { + // Reset everything on ESC/CSI/DCS entry self.intermediate_idx = 0; - self.num_params = 0; self.ignoring = false; + self.num_params = 0; + self.param = 0; }, - Action::BeginUtf8 => { - self.process_utf8(performer, byte); - }, + Action::BeginUtf8 => self.process_utf8(performer, byte), } } } @@ -710,6 +707,34 @@ mod tests { } #[test] + fn csi_reset() { + static INPUT: &[u8] = b"\x1b[3;1\x1b[2J"; + let mut dispatcher = CsiDispatcher::default(); + let mut parser = Parser::new(); + + for byte in INPUT { + parser.advance(&mut dispatcher, *byte); + } + + assert_eq!(dispatcher.params.len(), 1); + assert_eq!(dispatcher.params[0], &[2]); + } + + #[test] + fn dcs_reset() { + static INPUT: &[u8] = b"\x1bP1X\x9c\x1b[31mH"; + let mut dispatcher = CsiDispatcher::default(); + let mut parser = Parser::new(); + + for byte in INPUT { + parser.advance(&mut dispatcher, *byte); + } + + assert_eq!(dispatcher.params.len(), 1); + assert_eq!(dispatcher.params[0], &[31]); + } + + #[test] fn parse_osc_with_utf8_arguments() { static INPUT: &[u8] = &[ 0x0d, 0x1b, 0x5d, 0x32, 0x3b, 0x65, 0x63, 0x68, 0x6f, 0x20, 0x27, 0xc2, 0xaf, 0x5c, |