From 3f7236f81735e338e2ed3ecbf0f1fed26392acba Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sun, 7 Jun 2026 17:01:27 +0300 Subject: fix: drop empty pty mouse writes refs #496 --- src/pane/terminal.rs | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'src/pane') diff --git a/src/pane/terminal.rs b/src/pane/terminal.rs index 9bfcf57f..5f44854d 100644 --- a/src/pane/terminal.rs +++ b/src/pane/terminal.rs @@ -923,7 +923,10 @@ impl GhosttyPaneTerminal { }; let mut encoder = ghostty_mouse_encoder_for_terminal(&core.terminal)?; let event = ghostty_mouse_event_from_button_kind(kind, column, row, modifiers)?; - encoder.encode(&event).ok() + encoder + .encode(&event) + .ok() + .filter(|bytes| !bytes.is_empty()) } pub fn encode_mouse_motion( @@ -941,7 +944,10 @@ impl GhosttyPaneTerminal { } let mut encoder = ghostty_mouse_encoder_for_terminal(&core.terminal)?; let event = ghostty_mouse_event_from_motion_kind(kind, column, row, modifiers)?; - encoder.encode(&event).ok() + encoder + .encode(&event) + .ok() + .filter(|bytes| !bytes.is_empty()) } pub fn encode_mouse_wheel( @@ -956,7 +962,10 @@ impl GhosttyPaneTerminal { }; let mut encoder = ghostty_mouse_encoder_for_terminal(&core.terminal)?; let event = ghostty_mouse_event_from_wheel_kind(kind, column, row, modifiers)?; - encoder.encode(&event).ok() + encoder + .encode(&event) + .ok() + .filter(|bytes| !bytes.is_empty()) } pub fn visible_text(&self) -> String { @@ -2410,6 +2419,23 @@ mod tests { assert_eq!(encoded.as_deref(), Some(&b"\x1b[<36;5;7M"[..])); } + #[test] + fn ghostty_mouse_drag_without_motion_reporting_is_not_forwarded() { + let (tx, _rx) = mpsc::channel(4); + let mut terminal = crate::ghostty::Terminal::new(80, 24, 0).unwrap(); + terminal.write(b"\x1b[?1000h\x1b[?1006h"); + let pane = GhosttyPaneTerminal::new(terminal, tx).unwrap(); + + let encoded = pane.encode_mouse_button( + crossterm::event::MouseEventKind::Drag(crossterm::event::MouseButton::Left), + 4, + 6, + crossterm::event::KeyModifiers::empty(), + ); + + assert_eq!(encoded, None); + } + #[test] fn ghostty_mouse_moved_encoding_uses_any_motion_state() { let (tx, _rx) = mpsc::channel(4); -- cgit v1.2.3