wip
This commit is contained in:
parent
579c55708b
commit
98ed13c5ed
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user