aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2019-08-06 20:14:21 +0000
committerGitHub <noreply@github.com>2019-08-06 20:14:21 +0000
commit6bf9fcd440ce01b3a4ddecb0b8e2aedfbfa9b31a (patch)
tree89c2615ca7c9d6896f3a7ce93256be0d6479bb5b /src/lib.rs
parentf5113133d934aa5e0cf9d48be598efd118001f83 (diff)
parent1f9db05de259c4fb5862d449f1428d6183eadae2 (diff)
downloadr-alacritty-vte-6bf9fcd440ce01b3a4ddecb0b8e2aedfbfa9b31a.tar.gz
r-alacritty-vte-6bf9fcd440ce01b3a4ddecb0b8e2aedfbfa9b31a.tar.bz2
r-alacritty-vte-6bf9fcd440ce01b3a4ddecb0b8e2aedfbfa9b31a.zip
Add implicit zero to CSI escapes with trailing semicolon
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 7fa4c22..ba28e7c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -89,7 +89,6 @@ pub struct Parser {
intermediate_idx: usize,
params: [i64; MAX_PARAMS],
param: i64,
- collecting_param: bool,
num_params: usize,
osc_raw: [u8; MAX_OSC_RAW],
osc_params: [(usize, usize); MAX_PARAMS],
@@ -108,7 +107,6 @@ impl Parser {
intermediate_idx: 0,
params: [0i64; MAX_PARAMS],
param: 0,
- collecting_param: false,
num_params: 0,
osc_raw: [0; MAX_OSC_RAW],
osc_params: [(0, 0); MAX_PARAMS],
@@ -294,11 +292,9 @@ impl Parser {
},
Action::Unhook => performer.unhook(),
Action::CsiDispatch => {
- if self.collecting_param {
- let idx = self.num_params;
- self.params[idx] = self.param;
- self.num_params += 1;
- }
+ self.params[self.num_params] = self.param;
+ self.num_params += 1;
+
performer.csi_dispatch(
self.params(),
self.intermediates(),
@@ -308,7 +304,6 @@ impl Parser {
self.num_params = 0;
self.param = 0;
- self.collecting_param = false;
}
Action::EscDispatch => {
performer.esc_dispatch(
@@ -339,12 +334,10 @@ impl Parser {
self.params[idx] = self.param;
self.param = 0;
self.num_params += 1;
- self.collecting_param = false;
} else {
// Continue collecting bytes into param
self.param = self.param.saturating_mul(10);
self.param = self.param.saturating_add((byte - b'0') as i64);
- self.collecting_param = true;
}
},
Action::Clear => {
@@ -558,6 +551,19 @@ mod tests {
}
#[test]
+ fn parse_csi_params_trailing_semicolon() {
+ let mut dispatcher = CsiDispatcher::default();
+ let mut parser = Parser::new();
+
+ for byte in b"\x1b[4;m" {
+ parser.advance(&mut dispatcher, *byte);
+ }
+
+ assert_eq!(dispatcher.params.len(), 1);
+ assert_eq!(dispatcher.params[0], &[4, 0]);
+ }
+
+ #[test]
fn parse_semi_set_underline() {
// Create dispatcher and check state