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

@ -4,3 +4,13 @@ version = "0.1.0"
edition = "2021"
[dependencies]
anyhow = "1.0.53"
# cove-core = { path = "../cove-core" }
crossterm = "0.22.1"
# futures = "0.3.21"
# serde_json = "1.0.78"
# thiserror = "1.0.30"
tokio = { version = "1.16.1", features = ["full"] }
# tokio-stream = "0.1.8"
# tokio-tungstenite = "0.16.1"
tui = "0.17.0"

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(())
}