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

83
Cargo.lock generated
View file

@ -70,6 +70,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]]
name = "cassowary"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
[[package]]
name = "cfg-if"
version = "1.0.0"
@ -105,6 +111,12 @@ dependencies = [
[[package]]
name = "cove-tui"
version = "0.1.0"
dependencies = [
"anyhow",
"crossterm",
"tokio",
"tui",
]
[[package]]
name = "cpufeatures"
@ -115,6 +127,31 @@ dependencies = [
"libc",
]
[[package]]
name = "crossterm"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c85525306c4291d1b73ce93c8acf9c339f9b213aef6c1d85c3830cbf1c16325c"
dependencies = [
"bitflags",
"crossterm_winapi",
"libc",
"mio",
"parking_lot",
"signal-hook",
"signal-hook-mio",
"winapi",
]
[[package]]
name = "crossterm_winapi"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
dependencies = [
"winapi",
]
[[package]]
name = "crypto-common"
version = "0.1.2"
@ -638,6 +675,27 @@ dependencies = [
"digest 0.10.2",
]
[[package]]
name = "signal-hook"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d"
dependencies = [
"libc",
"signal-hook-registry",
]
[[package]]
name = "signal-hook-mio"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29fd5867f1c4f2c5be079aee7a2adf1152ebb04a4bc4d341f504b7dece607ed4"
dependencies = [
"libc",
"mio",
"signal-hook",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
@ -767,6 +825,19 @@ dependencies = [
"tungstenite",
]
[[package]]
name = "tui"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23ed0a32c88b039b73f1b6c5acbd0554bfa5b6be94467375fd947c4de3a02271"
dependencies = [
"bitflags",
"cassowary",
"crossterm",
"unicode-segmentation",
"unicode-width",
]
[[package]]
name = "tungstenite"
version = "0.16.0"
@ -807,6 +878,18 @@ dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-segmentation"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
[[package]]
name = "unicode-width"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "unicode-xid"
version = "0.2.2"

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