From 0377efdc16335d2fdd741e0b740e7767dce2fbd6 Mon Sep 17 00:00:00 2001 From: Lander Brandt Date: Tue, 24 Sep 2019 18:01:38 -0700 Subject: [PATCH] feat(cli): add `ctrlc_exit` config option This feature allows a user to set `ctrlc_exit` to `true` or `false` in their config to override how multiple CTRL-C invocations are handled. Without this change pressing CTRL-C multiple times will exit nu. With this change applied the user can configure the behavior to behave like other shells where multiple invocations will essentially clear the line. This fixes #457. --- src/cli.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cli.rs b/src/cli.rs index 31017ac6aa..b78c44c78f 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -405,6 +405,18 @@ pub async fn cli() -> Result<(), Box> { } LineResult::CtrlC => { + let config_ctrlc_exit = config::config(Tag::unknown())? + .get("ctrlc_exit") + .map(|s| match s.as_string().unwrap().as_ref() { + "true" => true, + _ => false, + }) + .unwrap_or(false); // default behavior is to allow CTRL-C spamming similar to other shells + + if !config_ctrlc_exit { + continue; + } + if ctrlcbreak { let _ = rl.save_history(&History::path()); std::process::exit(0);