use anyhow::Error;
use std::process::exit;
use std::sync::atomic::{AtomicBool, Ordering};
static SHIM_HAS_CONTROL: AtomicBool = AtomicBool::new(false);
const INTERRUPTED_EXIT_CODE: i32 = 130;
pub fn pass_control_to_shim() {
SHIM_HAS_CONTROL.store(true, Ordering::SeqCst);
}
pub fn set_ctrlc_handler() -> Result<(), Error> {
ctrlc::set_handler(move || {
if !SHIM_HAS_CONTROL.load(Ordering::SeqCst) {
let term = console::Term::stdout();
term.show_cursor().unwrap();
exit(INTERRUPTED_EXIT_CODE);
}
})?;
Ok(())
}