aboutsummaryrefslogtreecommitdiff
path: root/src/pane
diff options
context:
space:
mode:
authorzhugehyuk <icedac@users.noreply.github.com>2026-05-25 03:28:33 +0900
committerGitHub <noreply@github.com>2026-05-24 21:28:33 +0300
commit43c6ca3a5dbdcefc6c6dc29be9ce81d990baf39e (patch)
tree73be12f81129dab324ea08901c733a6a56ec0e61 /src/pane
parent5ce738cf5397d0d8a50ed1aa6335297073cc0f0f (diff)
feat: persist pane history across restarts (#248)
refs #217 Co-authored-by: Can Celik <ogulcancelik@gmail.com>
Diffstat (limited to 'src/pane')
-rw-r--r--src/pane/terminal.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/pane/terminal.rs b/src/pane/terminal.rs
index e1a57e89..77c83447 100644
--- a/src/pane/terminal.rs
+++ b/src/pane/terminal.rs
@@ -420,6 +420,19 @@ impl GhosttyPaneTerminal {
}
}
+ pub fn seed_history_ansi(&self, ansi: &str) {
+ if ansi.is_empty() {
+ return;
+ }
+ let Ok(mut core) = self.core.lock() else {
+ return;
+ };
+ core.terminal.write(ansi.as_bytes());
+ if let Ok(mut key_encoder) = self.key_encoder.lock() {
+ key_encoder.set_from_terminal(&core.terminal);
+ }
+ }
+
pub fn resize(&self, rows: u16, cols: u16, cell_width_px: u32, cell_height_px: u32) {
if let Ok(mut core) = self.core.lock() {
let _ = core
@@ -1848,6 +1861,24 @@ mod tests {
}
#[test]
+ fn seeded_history_is_rendered_on_next_draw() {
+ let (tx, _rx) = mpsc::channel(4);
+ let terminal = crate::ghostty::Terminal::new(20, 5, 100).unwrap();
+ let pane = GhosttyPaneTerminal::new(terminal, tx).unwrap();
+ pane.seed_history_ansi("restored history");
+
+ let backend = ratatui::backend::TestBackend::new(20, 5);
+ let mut terminal = ratatui::Terminal::new(backend).unwrap();
+ terminal
+ .draw(|frame| pane.render(frame, Rect::new(0, 0, 20, 5), false))
+ .unwrap();
+
+ let buffer = terminal.backend().buffer();
+ let row = (0..16).map(|x| buffer[(x, 0)].symbol()).collect::<String>();
+ assert_eq!(row, "restored history");
+ }
+
+ #[test]
fn render_leaves_unknown_host_default_background_transparent() {
let (tx, _rx) = mpsc::channel(4);
let terminal = crate::ghostty::Terminal::new(20, 5, 0).unwrap();