aboutsummaryrefslogtreecommitdiff
path: root/src/server/headless
diff options
context:
space:
mode:
authorakbash <akbash@herdr.dev>2026-09-05 04:39:25 +0300
committerGitHub <noreply@github.com>2026-09-05 03:39:25 +0200
commit3a822e8106b45745f9d463d9167033f977353d9f (patch)
tree5ffbf80074d739c9ac6976e8bfb894b9de16e5f3 /src/server/headless
parent7916be1656d8ee9c5882b52753cd47f5e58e3e7e (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.rs42
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()