forked from mars/breed
Add panic handler hook to exit alternative screen and raw mode
This commit is contained in:
parent
b2b69bf7b3
commit
e910608805
21
src/main.rs
21
src/main.rs
|
@ -21,7 +21,7 @@ use std::{
|
|||
env::args,
|
||||
ffi::OsString,
|
||||
fs::{File, OpenOptions},
|
||||
io::{stdout, Read, Stdout, Write},
|
||||
io::{Read, Stdout, Write},
|
||||
os::fd::FromRawFd,
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
|
@ -459,11 +459,28 @@ fn main() -> Result<()> {
|
|||
});
|
||||
|
||||
let state = State::from_str(file_name, &text)?;
|
||||
let mut stdout = stdout();
|
||||
|
||||
// begin to enter alternate screen
|
||||
let mut stdout = std::io::stdout();
|
||||
terminal::enable_raw_mode()?;
|
||||
stdout.queue(terminal::EnterAlternateScreen)?;
|
||||
|
||||
// register a panic handler to exit the alternate screen
|
||||
let old_panic_handler = std::panic::take_hook();
|
||||
std::panic::set_hook(Box::new(move |info| {
|
||||
let mut stdout = std::io::stdout();
|
||||
let _ = stdout.queue(terminal::LeaveAlternateScreen);
|
||||
let _ = terminal::disable_raw_mode();
|
||||
let _ = stdout.flush();
|
||||
old_panic_handler(info)
|
||||
}));
|
||||
|
||||
// run inner event loop
|
||||
let result = screen_main(&mut stdout, state);
|
||||
|
||||
// exit alternate screen
|
||||
stdout.queue(terminal::LeaveAlternateScreen)?;
|
||||
terminal::disable_raw_mode()?;
|
||||
|
||||
result
|
||||
}
|
||||
|
|
Reference in New Issue