From 3f5fbf4302d817c50b362a0613f091cbda04f0e9 Mon Sep 17 00:00:00 2001 From: Henri Bourcereau Date: Mon, 6 Nov 2023 21:33:08 +0100 Subject: [PATCH] tui client init --- client_tui/Cargo.toml | 14 ++++++++++++++ client_tui/src/main.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 client_tui/Cargo.toml create mode 100644 client_tui/src/main.rs diff --git a/client_tui/Cargo.toml b/client_tui/Cargo.toml new file mode 100644 index 0000000..04c4ad7 --- /dev/null +++ b/client_tui/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "client_tui" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.75" +bincode = "1.3.3" +crossterm = "0.27.0" +ratatui = "0.24.0" +renet = "0.0.13" +store = { path = "../store" } diff --git a/client_tui/src/main.rs b/client_tui/src/main.rs new file mode 100644 index 0000000..51748ad --- /dev/null +++ b/client_tui/src/main.rs @@ -0,0 +1,41 @@ +use crossterm::{ + event::{self, KeyCode, KeyEventKind}, + terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, + ExecutableCommand, +}; +use ratatui::{ + prelude::{CrosstermBackend, Stylize, Terminal}, + widgets::Paragraph, +}; +use std::io::{stdout, Result}; + +fn main() -> Result<()> { + stdout().execute(EnterAlternateScreen)?; + enable_raw_mode()?; + let mut terminal = Terminal::new(CrosstermBackend::new(stdout()))?; + terminal.clear()?; + + loop { + terminal.draw(|frame| { + let area = frame.size(); + frame.render_widget( + Paragraph::new("Hello Ratatui! (press 'q' to quit)") + .white() + .on_blue(), + area, + ); + })?; + + if event::poll(std::time::Duration::from_millis(16))? { + if let event::Event::Key(key) = event::read()? { + if key.kind == KeyEventKind::Press && key.code == KeyCode::Char('q') { + break; + } + } + } + } + + stdout().execute(LeaveAlternateScreen)?; + disable_raw_mode()?; + Ok(()) +}