diff --git a/examples/generate_fixture.rs b/examples/generate_fixture.rs index 2f82617..e03b6ca 100644 --- a/examples/generate_fixture.rs +++ b/examples/generate_fixture.rs @@ -14,9 +14,8 @@ fn main() { .unwrap(); let inputs = std::io::BufReader::new(inputs); - let mut i = 1; let mut prev_input = vec![]; - for line in inputs.lines() { + for (i, line) in (1..).zip(inputs.lines()) { let line = line.unwrap(); let input = helpers::unhex(line.as_bytes()); @@ -36,7 +35,5 @@ fn main() { )) .unwrap(); serde_json::to_writer_pretty(output_file, &screen).unwrap(); - - i += 1; } } diff --git a/src/perform.rs b/src/perform.rs index e36cfd8..cd39d53 100644 --- a/src/perform.rs +++ b/src/perform.rs @@ -110,7 +110,9 @@ impl vte::Perform for WrappedScreen { 'E' => self.screen.cnl(canonicalize_params_1(params, 1)), 'F' => self.screen.cpl(canonicalize_params_1(params, 1)), 'G' => self.screen.cha(canonicalize_params_1(params, 1)), - 'H' => self.screen.cup(canonicalize_params_2(params, 1, 1)), + 'H' | 'f' => { + self.screen.cup(canonicalize_params_2(params, 1, 1)); + } 'J' => self .screen .ed(canonicalize_params_1(params, 0), unhandled), diff --git a/tests/csi.rs b/tests/csi.rs index 7ebcfaa..1439325 100644 --- a/tests/csi.rs +++ b/tests/csi.rs @@ -5,6 +5,18 @@ fn absolute_movement() { helpers::fixture("absolute_movement"); } +#[test] +fn horizontal_vertical_position() { + let mut vt = vt100::Parser::new(5, 10, 0); + + vt.process(b"\x1b[3;7fX"); + assert_eq!(vt.screen().cell(2, 6).unwrap().contents(), "X"); + assert_eq!(vt.screen().cursor_position(), (2, 7)); + + vt.process(b"\x1b[fY"); + assert_eq!(vt.screen().cell(0, 0).unwrap().contents(), "Y"); +} + #[test] fn row_clamp() { let mut vt = vt100::Parser::default();