altar 0.1.0

A TUI library in the style of SwiftUI
Documentation
use std::io::{stdout, Write};

use crossterm::{
    queue,
    terminal::{EnterAlternateScreen, LeaveAlternateScreen},
};

pub struct RawModeGuard {
    use_full_screen: bool,
}

impl RawModeGuard {
    pub fn new(use_full_screen: bool) -> Self {
        crossterm::terminal::enable_raw_mode().expect("Failed to enter raw mode");
        if use_full_screen {
            queue!(stdout(), crossterm::cursor::Hide, EnterAlternateScreen).unwrap();
        } else {
            queue!(stdout(), crossterm::cursor::Hide).unwrap();
        }
        stdout().flush().unwrap();
        Self { use_full_screen }
    }
}

impl Drop for RawModeGuard {
    fn drop(&mut self) {
        crossterm::terminal::disable_raw_mode().expect("Failed to exit raw mode");
        if self.use_full_screen {
            queue!(stdout(), crossterm::cursor::Show, LeaveAlternateScreen).unwrap();
        } else {
            queue!(stdout(), crossterm::cursor::Show, crossterm::cursor::MoveToColumn(0)).unwrap();
        }
        stdout().flush().unwrap();
    }
}