From 6e419602a80c0922c9d5aeb7940b441d7e748699 Mon Sep 17 00:00:00 2001 From: Bo Maryniuk Date: Thu, 16 Jul 2026 18:37:53 +0200 Subject: [PATCH 1/2] Fix csi f --- src/perform.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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), From 9bf04772680e09153687f017b1c7a15122496500 Mon Sep 17 00:00:00 2001 From: Bo Maryniuk Date: Thu, 16 Jul 2026 18:38:03 +0200 Subject: [PATCH 2/2] Add unit test for the csv f position --- tests/csi.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/csi.rs b/tests/csi.rs index 7ebcfaa..cbc76dc 100644 --- a/tests/csi.rs +++ b/tests/csi.rs @@ -15,6 +15,15 @@ fn row_clamp() { assert_eq!(vt.screen().cursor_position(), (23, 0)); } +#[test] +fn hvp() { + let mut vt = vt100::Parser::new(3, 3, 0); + + vt.process(b"\x1b[2;3fX"); + + assert_eq!(vt.screen().cell(1, 2).unwrap().contents(), "X"); +} + #[test] fn relative_movement() { helpers::fixture("relative_movement");