refactor: reuse tui_teardown

This commit is contained in:
facile pop culture reference 2026-07-02 07:29:22 +03:00
parent 2ab871d10b
commit 90ebae0f26

View file

@ -32,23 +32,25 @@ use ::{
($state:expr) => { pub fn main () -> Usually<()> { tui_run_main($state) } } ($state:expr) => { pub fn main () -> Usually<()> { tui_run_main($state) } }
} }
pub fn tui_run_main <T> (state: T) -> Usually<()> where pub fn tui_run_main <T> (state: Arc<RwLock<T>>) -> Usually<()> where
T: View<Tui> + Apply<TuiEvent, Usually<()>> + Send + Sync + 'static T: View<Tui> + Apply<TuiEvent, Usually<()>> + Send + Sync + 'static
{ {
tui_setup_panic();
Exit::run(|exit|{ Exit::run(|exit|{
let state = Arc::new(RwLock::new(state));
let scan = Duration::from_millis(100); let scan = Duration::from_millis(100);
let frame = Duration::from_millis(10); let frame = Duration::from_millis(10);
let (input, output) = tui_io(exit.as_ref(), &state, scan, frame, std::io::stdout())?; let (input, output) = tui_io(exit.as_ref(), &state, scan, frame, std::io::stdout())?;
output.join(); output.join();
stdout().execute(LeaveAlternateScreen)?; tui_teardown(&mut stdout())
CrosstermBackend::new(stdout()).show_cursor()?;
disable_raw_mode()?;
Ok(())
}) })
} }
pub fn tui_teardown <W: Write> (backend: &mut W) -> Usually<()> {
use ::ratatui::backend::Backend;
stdout().execute(LeaveAlternateScreen)?;
CrosstermBackend::new(backend).show_cursor()?;
disable_raw_mode().map_err(Into::into)
}
pub fn tui_setup_panic () { pub fn tui_setup_panic () {
use ::std::panic::{set_hook, PanicHookInfo}; use ::std::panic::{set_hook, PanicHookInfo};
use ::better_panic::{Settings, Verbosity}; use ::better_panic::{Settings, Verbosity};
@ -56,9 +58,7 @@ pub fn tui_setup_panic () {
.verbosity(Verbosity::Full) .verbosity(Verbosity::Full)
.create_panic_handler(); .create_panic_handler();
set_hook(Box::new(move |info: &PanicHookInfo|{ set_hook(Box::new(move |info: &PanicHookInfo|{
stdout().execute(LeaveAlternateScreen).unwrap(); let _ = tui_teardown(&mut stdout());
CrosstermBackend::new(stdout()).show_cursor().unwrap();
disable_raw_mode().unwrap();
panic(info); panic(info);
})); }));
} }
@ -493,13 +493,6 @@ fn y_scroll () -> impl Draw<Tui> {
}) })
} }
pub fn tui_teardown <W: Write> (backend: &mut CrosstermBackend<W>) -> Usually<()> {
use ::ratatui::backend::Backend;
stdout().execute(LeaveAlternateScreen)?;
backend.show_cursor()?;
disable_raw_mode().map_err(Into::into)
}
pub fn tui_update ( pub fn tui_update (
Tui(buf, ..): &mut Tui, Tui(buf, ..): &mut Tui,
area: XYWH<u16>, area: XYWH<u16>,