aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <contact@christianduerr.com>2020-01-31 22:22:09 +0000
committerGitHub <noreply@github.com>2020-01-31 22:22:09 +0000
commit035c47fb362cc97fb42712e0138c55a7a4d318e4 (patch)
tree93058b7d6b1ef487b14be993b05cfd719f7cdaa8
parent3ccf275e5dd438fc0aeaa000d49a50eb8e4edaa0 (diff)
downloadr-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.md4
-rw-r--r--src/lib.rs39
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
diff --git a/src/lib.rs b/src/lib.rs
index 1402108..011b6a1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,