mirror of
https://github.com/orhun/systeroid
synced 2024-10-01 13:13:32 +00:00
feat(tui): add a panic hook to reset terminal upon panic (#112)
This commit is contained in:
parent
3f862ffcdd
commit
1b1aa97be4
|
@ -1,6 +1,7 @@
|
||||||
use ratatui::backend::TermionBackend;
|
use ratatui::backend::TermionBackend;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::io;
|
use std::io::{self, Write};
|
||||||
|
use std::panic;
|
||||||
use std::process;
|
use std::process;
|
||||||
use systeroid_tui::args::Args;
|
use systeroid_tui::args::Args;
|
||||||
use systeroid_tui::error::Result;
|
use systeroid_tui::error::Result;
|
||||||
|
@ -15,6 +16,24 @@ fn main() -> Result<()> {
|
||||||
let output = MouseTerminal::from(output);
|
let output = MouseTerminal::from(output);
|
||||||
let output = output.into_alternate_screen()?;
|
let output = output.into_alternate_screen()?;
|
||||||
let backend = TermionBackend::new(output);
|
let backend = TermionBackend::new(output);
|
||||||
|
let panic_hook = panic::take_hook();
|
||||||
|
panic::set_hook(Box::new(move |panic| {
|
||||||
|
let panic_cleanup = || -> Result<()> {
|
||||||
|
let mut output = io::stderr();
|
||||||
|
write!(
|
||||||
|
output,
|
||||||
|
"{}{}{}",
|
||||||
|
termion::clear::All,
|
||||||
|
termion::screen::ToMainScreen,
|
||||||
|
termion::cursor::Show
|
||||||
|
)?;
|
||||||
|
output.into_raw_mode()?.suspend_raw_mode()?;
|
||||||
|
io::stderr().flush()?;
|
||||||
|
Ok(())
|
||||||
|
};
|
||||||
|
panic_cleanup().expect("failed to clean up for panic");
|
||||||
|
panic_hook(panic);
|
||||||
|
}));
|
||||||
match systeroid_tui::run(args, backend) {
|
match systeroid_tui::run(args, backend) {
|
||||||
Ok(_) => process::exit(0),
|
Ok(_) => process::exit(0),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
Loading…
Reference in a new issue