From aea908a7cf72bb0d2ff94fe4c5079f780e69318c Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sun, 5 Apr 2026 21:03:17 +0300 Subject: fix: respect synchronized terminal output batches --- src/pane.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/pane.rs') diff --git a/src/pane.rs b/src/pane.rs index 02bf5033..314554e1 100644 --- a/src/pane.rs +++ b/src/pane.rs @@ -449,9 +449,13 @@ impl GhosttyPaneTerminal { }; core.terminal.write(bytes); + let synchronized_output = core + .terminal + .mode_get(crate::ghostty::MODE_SYNCHRONIZED_OUTPUT) + .unwrap_or(false); let _ = response_writer; ProcessBytesResult { - request_render: true, + request_render: !synchronized_output, } } @@ -1964,6 +1968,23 @@ mod tests { ); } + #[test] + fn synchronized_output_suppresses_intermediate_render_requests_until_batch_ends() { + let (tx, _rx) = mpsc::channel(4); + let terminal = crate::ghostty::Terminal::new(80, 24, 0).unwrap(); + let pane_terminal = GhosttyPaneTerminal::new(terminal, tx.clone()).unwrap(); + let pane_id = PaneId::from_raw(1); + + let begin = pane_terminal.process_pty_bytes(pane_id, b"\x1b[?2026h", &tx); + assert!(!begin.request_render); + + let body = pane_terminal.process_pty_bytes(pane_id, b"hello", &tx); + assert!(!body.request_render); + + let end = pane_terminal.process_pty_bytes(pane_id, b"\x1b[?2026l", &tx); + assert!(end.request_render); + } + #[tokio::test] async fn focus_events_are_forwarded_when_enabled() { let (tx, mut rx) = mpsc::channel(4); -- cgit v1.2.3