mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2026-07-17 15:56:57 +02:00
refactor: reuse tui_teardown
This commit is contained in:
parent
2ab871d10b
commit
90ebae0f26
1 changed files with 10 additions and 17 deletions
27
src/term.rs
27
src/term.rs
|
|
@ -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>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue