retach 0.10.0

Persistent terminal sessions with native scrollback passthrough
Documentation
use super::dirty::DirtyTracker;
use crate::screen::grid::TerminalModes;

/// Per-connection render cache for dirty tracking and mode delta.
pub(in crate::screen) struct RenderCache {
    pub(super) rows: DirtyTracker,
    pub(super) last_modes: Option<TerminalModes>,
    pub(super) last_scroll_region: Option<(u16, u16)>,
    pub(super) last_title: String,
    pub(super) last_cursor: Option<(u16, u16)>,
    pub(super) last_cursor_visible: Option<bool>,
}

impl Default for RenderCache {
    fn default() -> Self {
        Self::new()
    }
}

impl RenderCache {
    pub fn new() -> Self {
        Self {
            rows: DirtyTracker::new(),
            last_modes: None,
            last_scroll_region: None,
            last_title: String::new(),
            last_cursor: None,
            last_cursor_visible: None,
        }
    }

    /// Invalidate the cache so the next render is a full redraw.
    pub fn invalidate(&mut self) {
        self.rows.invalidate();
        self.last_modes = None;
        self.last_scroll_region = None;
        self.last_title.clear();
        self.last_cursor = None;
        self.last_cursor_visible = None;
    }
}