Files
lime/crates/lime-ui/src/terminal.rs
T
2026-06-21 20:08:56 -05:00

41 lines
1.0 KiB
Rust

use std::io::{self, Stdout};
use anyhow::Result;
use crossterm::cursor::{Hide, Show};
use crossterm::execute;
use crossterm::terminal::{
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
};
use ratatui::backend::CrosstermBackend;
use ratatui::Terminal;
pub type LimeTerminal = Terminal<CrosstermBackend<Stdout>>;
pub struct TerminalSession {
terminal: LimeTerminal,
}
impl TerminalSession {
pub fn enter() -> Result<Self> {
enable_raw_mode()?;
let mut stdout = io::stdout();
execute!(stdout, EnterAlternateScreen, Hide)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
terminal.clear()?;
Ok(Self { terminal })
}
pub fn terminal_mut(&mut self) -> &mut LimeTerminal {
&mut self.terminal
}
}
impl Drop for TerminalSession {
fn drop(&mut self) {
let _ = disable_raw_mode();
let mut stdout = io::stdout();
let _ = execute!(stdout, Show, LeaveAlternateScreen);
}
}