This commit is contained in:
Andy Gayton 2024-07-18 03:03:12 -04:00
parent 579c55708b
commit 98ed13c5ed
2 changed files with 4 additions and 19 deletions

View File

@ -32,11 +32,7 @@ use nu_std::load_standard_library;
use nu_utils::perf; use nu_utils::perf;
use run::{run_commands, run_file, run_repl}; use run::{run_commands, run_file, run_repl};
use signals::ctrlc_protection; use signals::ctrlc_protection;
use std::{ use std::{path::PathBuf, str::FromStr, sync::Arc};
path::PathBuf,
str::FromStr,
sync::{atomic::AtomicBool, Arc},
};
fn get_engine_state() -> EngineState { fn get_engine_state() -> EngineState {
let engine_state = nu_cmd_lang::create_default_context(); let engine_state = nu_cmd_lang::create_default_context();
@ -74,10 +70,9 @@ fn main() -> Result<()> {
report_error_new(&engine_state, &err); report_error_new(&engine_state, &err);
} }
let ctrlc_bool = Arc::new(AtomicBool::new(false));
let ctrlc_handlers = ctrlc::Handlers::new(); let ctrlc_handlers = ctrlc::Handlers::new();
// TODO: make this conditional in the future // TODO: make this conditional in the future
ctrlc_protection(&mut engine_state, &ctrlc_bool, &ctrlc_handlers); ctrlc_protection(&mut engine_state, &ctrlc_handlers);
// Begin: Default NU_LIB_DIRS, NU_PLUGIN_DIRS // Begin: Default NU_LIB_DIRS, NU_PLUGIN_DIRS
// Set default NU_LIB_DIRS and NU_PLUGIN_DIRS here before the env.nu is processed. If // Set default NU_LIB_DIRS and NU_PLUGIN_DIRS here before the env.nu is processed. If

View File

@ -2,28 +2,18 @@ use nu_protocol::{
engine::{ctrlc::Handlers, EngineState}, engine::{ctrlc::Handlers, EngineState},
Signals, Signals,
}; };
use std::sync::{ use std::sync::{atomic::AtomicBool, Arc};
atomic::{AtomicBool, Ordering},
Arc,
};
pub(crate) fn ctrlc_protection( pub(crate) fn ctrlc_protection(engine_state: &mut EngineState, ctrlc_handlers: &Handlers) {
engine_state: &mut EngineState,
ctrlc_bool: &Arc<AtomicBool>,
ctrlc_handlers: &Handlers,
) {
let interrupt = Arc::new(AtomicBool::new(false)); let interrupt = Arc::new(AtomicBool::new(false));
engine_state.set_signals(Signals::new(interrupt.clone())); engine_state.set_signals(Signals::new(interrupt.clone()));
{ {
let ctrlc_bool = ctrlc_bool.clone();
let ctrlc_handlers = ctrlc_handlers.clone(); let ctrlc_handlers = ctrlc_handlers.clone();
ctrlc::set_handler(move || { ctrlc::set_handler(move || {
ctrlc_bool.store(true, Ordering::SeqCst);
ctrlc_handlers.run(); ctrlc_handlers.run();
}) })
.expect("Error setting Ctrl-C handler"); .expect("Error setting Ctrl-C handler");
} }
engine_state.ctrlc = Some(ctrlc_bool.clone());
engine_state.ctrlc_handlers = Some(ctrlc_handlers.clone()); engine_state.ctrlc_handlers = Some(ctrlc_handlers.clone());
} }