43 lines
977 B
Rust
43 lines
977 B
Rust
mod config;
|
|
mod never;
|
|
mod replies;
|
|
mod room;
|
|
mod ui;
|
|
|
|
use std::io;
|
|
|
|
use config::Config;
|
|
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
|
|
use crossterm::execute;
|
|
use crossterm::terminal::{EnterAlternateScreen, LeaveAlternateScreen};
|
|
use tui::backend::CrosstermBackend;
|
|
use tui::Terminal;
|
|
use ui::Ui;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let config = Box::leak(Box::new(Config::load()));
|
|
|
|
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 = Ui::run(config, &mut terminal).await;
|
|
|
|
execute!(
|
|
terminal.backend_mut(),
|
|
LeaveAlternateScreen,
|
|
DisableMouseCapture
|
|
)?;
|
|
crossterm::terminal::disable_raw_mode()?;
|
|
|
|
result?;
|
|
|
|
Ok(())
|
|
}
|