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) } }
}
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
{
tui_setup_panic();
Exit::run(|exit|{
let state = Arc::new(RwLock::new(state));
let scan = Duration::from_millis(100);
let frame = Duration::from_millis(10);
let (input, output) = tui_io(exit.as_ref(), &state, scan, frame, std::io::stdout())?;
output.join();
stdout().execute(LeaveAlternateScreen)?;
CrosstermBackend::new(stdout()).show_cursor()?;
disable_raw_mode()?;
Ok(())
tui_teardown(&mut stdout())
})
}
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 () {
use ::std::panic::{set_hook, PanicHookInfo};
use ::better_panic::{Settings, Verbosity};
@ -56,9 +58,7 @@ pub fn tui_setup_panic () {
.verbosity(Verbosity::Full)
.create_panic_handler();
set_hook(Box::new(move |info: &PanicHookInfo|{
stdout().execute(LeaveAlternateScreen).unwrap();
CrosstermBackend::new(stdout()).show_cursor().unwrap();
disable_raw_mode().unwrap();
let _ = tui_teardown(&mut stdout());
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 (
Tui(buf, ..): &mut Tui,
area: XYWH<u16>,