diff options
author | Christian Duerr <chrisduerr@users.noreply.github.com> | 2019-08-06 20:14:21 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-06 20:14:21 +0000 |
commit | 6bf9fcd440ce01b3a4ddecb0b8e2aedfbfa9b31a (patch) | |
tree | 89c2615ca7c9d6896f3a7ce93256be0d6479bb5b /src/lib.rs | |
parent | f5113133d934aa5e0cf9d48be598efd118001f83 (diff) | |
parent | 1f9db05de259c4fb5862d449f1428d6183eadae2 (diff) | |
download | r-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.rs | 26 |
1 files changed, 16 insertions, 10 deletions
@@ -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 |