diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-05 21:03:17 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-04-05 21:03:17 +0300 |
| commit | aea908a7cf72bb0d2ff94fe4c5079f780e69318c (patch) | |
| tree | e4103d9cc934be1dea2596e3b94cbbbee3476dd0 /src/pane.rs | |
| parent | 2cb03f31ff46f7e4ac00113cb64ef7742b1fd715 (diff) | |
fix: respect synchronized terminal output batches
Diffstat (limited to 'src/pane.rs')
| -rw-r--r-- | src/pane.rs | 23 |
1 files changed, 22 insertions, 1 deletions
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); |
