mirror of
https://github.com/nushell/nushell.git
synced 2025-08-06 22:06:51 +02:00
20 lines
623 B
Rust
20 lines
623 B
Rust
use nu_protocol::{Handlers, SignalAction, Signals, engine::EngineState};
|
|
use std::sync::{
|
|
Arc,
|
|
atomic::{AtomicBool, Ordering},
|
|
};
|
|
|
|
pub(crate) fn ctrlc_protection(engine_state: &mut EngineState) {
|
|
let interrupt = Arc::new(AtomicBool::new(false));
|
|
engine_state.set_signals(Signals::new(interrupt.clone()));
|
|
|
|
let signal_handlers = Handlers::new();
|
|
engine_state.signal_handlers = Some(signal_handlers.clone());
|
|
|
|
ctrlc::set_handler(move || {
|
|
interrupt.store(true, Ordering::Relaxed);
|
|
signal_handlers.run(SignalAction::Interrupt);
|
|
})
|
|
.expect("Error setting Ctrl-C handler");
|
|
}
|