aboutsummaryrefslogtreecommitdiff
path: root/src/pane.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-05 21:03:17 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-05 21:03:17 +0300
commitaea908a7cf72bb0d2ff94fe4c5079f780e69318c (patch)
treee4103d9cc934be1dea2596e3b94cbbbee3476dd0 /src/pane.rs
parent2cb03f31ff46f7e4ac00113cb64ef7742b1fd715 (diff)
fix: respect synchronized terminal output batches
Diffstat (limited to 'src/pane.rs')
-rw-r--r--src/pane.rs23
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);