Render basic tui and restore terminal

This commit is contained in:
Joscha 2022-02-15 23:16:01 +01:00
parent bd61530b5f
commit 18194f586c
3 changed files with 137 additions and 2 deletions

View file

@ -1,3 +1,45 @@
fn main() {
println!("Hello, world!");
use std::io::{self, Stdout};
use std::time::Duration;
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
use crossterm::execute;
use crossterm::terminal::{EnterAlternateScreen, LeaveAlternateScreen};
use tokio::time;
use tui::backend::CrosstermBackend;
use tui::widgets::{Block, Borders};
use tui::Terminal;
async fn run(terminal: &mut Terminal<CrosstermBackend<Stdout>>) -> anyhow::Result<()> {
terminal.draw(|f| {
let block = Block::default().title("Block").borders(Borders::ALL);
f.render_widget(block, f.size());
})?;
time::sleep(Duration::from_secs(1)).await;
Ok(())
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let mut terminal = Terminal::new(CrosstermBackend::new(io::stdout()))?;
crossterm::terminal::enable_raw_mode()?;
execute!(
terminal.backend_mut(),
EnterAlternateScreen,
EnableMouseCapture
)?;
// Defer error handling so the terminal always gets restored properly
let result = run(&mut terminal).await;
crossterm::terminal::disable_raw_mode()?;
execute!(
terminal.backend_mut(),
LeaveAlternateScreen,
DisableMouseCapture
)?;
result?;
Ok(())
}