aboutsummaryrefslogtreecommitdiff
path: root/src/terminal/runtime.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-08-14 05:18:30 +0300
committerGitHub <noreply@github.com>2026-08-14 05:18:30 +0300
commitd76657f2c7fc18dcce3b9af43842c8afaba1646b (patch)
treed8643d39aaa1aff3193e178760f21d52150c6f7c /src/terminal/runtime.rs
parentd2c317adc4b5fd73a7054d74f92d633a31069391 (diff)
fix: speed up alternate-screen history reads (#2426)
refs #2387
Diffstat (limited to 'src/terminal/runtime.rs')
-rw-r--r--src/terminal/runtime.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/terminal/runtime.rs b/src/terminal/runtime.rs
index 156d18fd..619c98a4 100644
--- a/src/terminal/runtime.rs
+++ b/src/terminal/runtime.rs
@@ -468,6 +468,27 @@ impl TerminalRuntime {
Some((screen, crate::terminal::ScreenSnapshot { cols, rows }))
}
+ pub(crate) fn screen_text_snapshot_with_seq(
+ &self,
+ ) -> Option<(
+ crate::ghostty::ActiveScreen,
+ crate::terminal::ScreenSnapshot,
+ u64,
+ )> {
+ for _ in 0..3 {
+ let before = self.content_seq();
+ if !before.is_multiple_of(2) {
+ continue;
+ }
+ let (screen, snapshot) = self.screen_text_snapshot()?;
+ let after = self.content_seq();
+ if before == after {
+ return Some((screen, snapshot, after));
+ }
+ }
+ None
+ }
+
pub fn encode_mouse_button(
&self,
kind: crossterm::event::MouseEventKind,
@@ -525,6 +546,10 @@ impl TerminalRuntime {
pub(crate) fn current_size(&self) -> (u16, u16) {
self.0.current_size()
}
+
+ pub(crate) fn content_seq(&self) -> u64 {
+ self.0.content_seq()
+ }
}
#[cfg(test)]