aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/rust/main.rs44
1 files changed, 35 insertions, 9 deletions
diff --git a/src/main/rust/main.rs b/src/main/rust/main.rs
index e42fde9..2892d7f 100644
--- a/src/main/rust/main.rs
+++ b/src/main/rust/main.rs
@@ -2,12 +2,19 @@ mod app;
pub mod store;
use app::App;
-use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
use miette::{IntoDiagnostic, Result};
+use ratatui::crossterm::{
+ event::{
+ self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEvent, KeyEventKind,
+ },
+ execute,
+ terminal::{EnterAlternateScreen, LeaveAlternateScreen, disable_raw_mode, enable_raw_mode},
+};
use ratatui::{
- DefaultTerminal, Frame,
+ DefaultTerminal, Frame, Terminal,
buffer::Buffer,
layout::Rect,
+ prelude::CrosstermBackend,
style::Stylize,
symbols::border,
text::{Line, Text},
@@ -16,13 +23,32 @@ use ratatui::{
#[cfg(not(tarpaulin_include))]
fn main() -> Result<()> {
- ratatui::run(|term| {
- let mut ctx = Runtime {
- app: App::default(),
- };
- ctx.app.init_context()?;
- ctx.run(term)
- })
+ enable_raw_mode().into_diagnostic()?;
+ let mut stdout = std::io::stdout();
+
+ execute!(stdout, EnterAlternateScreen, EnableMouseCapture).into_diagnostic()?;
+
+ let backend = CrosstermBackend::new(stdout);
+ let mut term = Terminal::new(backend).into_diagnostic()?;
+
+ let mut ctx = Runtime {
+ app: App::default(),
+ };
+ ctx.app.init_context()?;
+
+ // could be error, so don't unwrap; let term restore first
+ let run = ctx.run(&mut term);
+
+ // restore terminal
+ disable_raw_mode().into_diagnostic()?;
+ execute!(
+ term.backend_mut(),
+ LeaveAlternateScreen,
+ DisableMouseCapture
+ )
+ .into_diagnostic()?;
+ term.show_cursor().into_diagnostic()?;
+ run
}
struct Runtime {