diff options
| author | akbash <akbash@herdr.dev> | 2026-09-05 04:39:25 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-05 03:39:25 +0200 |
| commit | 3a822e8106b45745f9d463d9167033f977353d9f (patch) | |
| tree | 5ffbf80074d739c9ac6976e8bfb894b9de16e5f3 /src/server/headless | |
| parent | 7916be1656d8ee9c5882b52753cd47f5e58e3e7e (diff) | |
fix: preserve pixel mouse after sgr reassertion (#3637)
refs #3295
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Diffstat (limited to 'src/server/headless')
| -rw-r--r-- | src/server/headless/tests/mod.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/server/headless/tests/mod.rs b/src/server/headless/tests/mod.rs index 2951a82d..1e4249b5 100644 --- a/src/server/headless/tests/mod.rs +++ b/src/server/headless/tests/mod.rs @@ -3885,6 +3885,48 @@ fn client_pane_pixel_mouse_uses_runtime_pixel_encoding() { } #[test] +fn client_pane_pixel_mouse_stays_pixel_scaled_when_sgr_is_reasserted() { + let rt = tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("test runtime"); + let _runtime_guard = rt.enter(); + let (runtime, mut input_rx) = + crate::terminal::TerminalRuntime::test_with_channel_and_scrollback_bytes( + 80, + 24, + 0, + b"\x1b[?1003h\x1b[?1006h\x1b[?1016h\x1b[?1006h", + 4, + ); + runtime.resize(24, 80, 10, 20); + + apply_client_pane_input_events( + &runtime, + &[crate::protocol::ClientPaneInputEvent::Mouse { + kind: crate::protocol::ClientMouseKind::Down(crate::protocol::ClientMouseButton::Left), + position: crate::protocol::ClientMousePosition::Pixels { + x: 403, + y: 240, + column: 40, + row: 12, + }, + geometry: None, + modifiers: 0, + lines: 1, + }], + ) + .expect("pixel mouse input"); + assert_eq!( + input_rx.try_recv().expect("encoded pixel mouse"), + Bytes::from_static(b"\x1b[<0;403;240M") + ); + drop(runtime); + drop(_runtime_guard); + rt.shutdown_timeout(Duration::from_millis(100)); +} + +#[test] fn client_pane_pixel_mouse_falls_back_to_canonical_cell_position() { let rt = tokio::runtime::Builder::new_current_thread() .enable_all() |
