mirror of
https://github.com/wez/wezterm.git
synced 2024-09-20 19:27:22 +03:00
termwiz: fix dec private mode parsing
When processing `\033[?1002;1003;1005;1006h`, when we encountered `1005` we would skip 1006. This was because we hit the unspecified enum case for 1005 (we have no enum variant for that mode) and that code path didn't properly advance only by a single position. This commit fixes that. refs: https://github.com/wez/wezterm/issues/211#issuecomment-641302077
This commit is contained in:
parent
65f94bd57b
commit
18a234a162
@ -1539,14 +1539,22 @@ impl<'a> CSIParser<'a> {
|
||||
|
||||
fn dec(&mut self, params: &'a [i64]) -> Result<DecPrivateMode, ()> {
|
||||
match num::FromPrimitive::from_i64(params[0]) {
|
||||
None => Ok(DecPrivateMode::Unspecified(params[0].to_u16().ok_or(())?)),
|
||||
None => Ok(self.advance_by(
|
||||
1,
|
||||
params,
|
||||
DecPrivateMode::Unspecified(params[0].to_u16().ok_or(())?),
|
||||
)),
|
||||
Some(mode) => Ok(self.advance_by(1, params, DecPrivateMode::Code(mode))),
|
||||
}
|
||||
}
|
||||
|
||||
fn terminal_mode(&mut self, params: &'a [i64]) -> Result<TerminalMode, ()> {
|
||||
match num::FromPrimitive::from_i64(params[0]) {
|
||||
None => Ok(TerminalMode::Unspecified(params[0].to_u16().ok_or(())?)),
|
||||
None => Ok(self.advance_by(
|
||||
1,
|
||||
params,
|
||||
TerminalMode::Unspecified(params[0].to_u16().ok_or(())?),
|
||||
)),
|
||||
Some(mode) => Ok(self.advance_by(1, params, TerminalMode::Code(mode))),
|
||||
}
|
||||
}
|
||||
@ -2048,6 +2056,27 @@ mod test {
|
||||
))),
|
||||
]
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
parse_int(
|
||||
'h',
|
||||
&[1002, 1003, 1005, 1006],
|
||||
b'?',
|
||||
"\x1b[?1002h\x1b[?1003h\x1b[?1005h\x1b[?1006h"
|
||||
),
|
||||
vec![
|
||||
CSI::Mode(Mode::SetDecPrivateMode(DecPrivateMode::Code(
|
||||
DecPrivateModeCode::ButtonEventMouse,
|
||||
))),
|
||||
CSI::Mode(Mode::SetDecPrivateMode(DecPrivateMode::Code(
|
||||
DecPrivateModeCode::AnyEventMouse,
|
||||
))),
|
||||
CSI::Mode(Mode::SetDecPrivateMode(DecPrivateMode::Unspecified(1005))),
|
||||
CSI::Mode(Mode::SetDecPrivateMode(DecPrivateMode::Code(
|
||||
DecPrivateModeCode::SGRMouse,
|
||||
))),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
Reference in New Issue
Block a user