From 28d1b305c47fc92e19f21df0858ab2a522c21901 Mon Sep 17 00:00:00 2001 From: FragrantArmpit Date: Tue, 23 Jul 2024 18:00:57 +0000 Subject: [PATCH] Add a signal handler to reset the cursor on interrupt (#2603) Co-authored-by: Jonathan Kelley --- Cargo.lock | 1 + packages/cli/Cargo.toml | 4 +++- packages/cli/src/cli/create.rs | 6 ++++++ packages/cli/src/cli/init.rs | 6 ++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 5eabc4b29..5cabdb177 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2417,6 +2417,7 @@ dependencies = [ "chrono", "clap 4.5.9", "colored 2.1.0", + "console", "console-subscriber", "crossterm", "ctrlc", diff --git a/packages/cli/Cargo.toml b/packages/cli/Cargo.toml index 749212b6e..3c2203e1a 100644 --- a/packages/cli/Cargo.toml +++ b/packages/cli/Cargo.toml @@ -41,8 +41,11 @@ hyper-rustls = { workspace = true } rustls = {version="0.23.11", default-features=false, features =["logging","std","tls12","ring"]} subprocess = "0.2.9" rayon = "1.8.0" +console = "0.15.8" +ctrlc = "3.2.3" futures-channel = { workspace = true } krates = { version = "0.17.0" } + axum = { workspace = true, features = ["ws"] } axum-server = { workspace = true, features = ["tls-rustls"] } axum-extra = { workspace = true, features = ["typed-header"] } @@ -68,7 +71,6 @@ tower = { workspace = true } once_cell = "1.19.0" # plugin packages -ctrlc = "3.2.3" open = "5.0.1" cargo-generate = "=0.21.1" toml_edit = "0.22.15" diff --git a/packages/cli/src/cli/create.rs b/packages/cli/src/cli/create.rs index fbf63cf21..f5cba2f93 100644 --- a/packages/cli/src/cli/create.rs +++ b/packages/cli/src/cli/create.rs @@ -42,6 +42,12 @@ impl Create { if self.yes && args.name.is_none() { return Err("You have to provide the project's name when using `--yes` option.".into()); } + // https://github.com/console-rs/dialoguer/issues/294 + ctrlc::set_handler(move || { + let _ = console::Term::stdout().show_cursor(); + std::process::exit(0); + }) + .expect("ctrlc::set_handler"); let path = cargo_generate::generate(args)?; post_create(&path) } diff --git a/packages/cli/src/cli/init.rs b/packages/cli/src/cli/init.rs index 3d4959b15..229e33078 100644 --- a/packages/cli/src/cli/init.rs +++ b/packages/cli/src/cli/init.rs @@ -29,6 +29,12 @@ impl Init { let name = std::env::current_dir()? .file_name() .map(|f| f.to_str().unwrap().to_string()); + // https://github.com/console-rs/dialoguer/issues/294 + ctrlc::set_handler(move || { + let _ = console::Term::stdout().show_cursor(); + std::process::exit(0); + }) + .expect("ctrlc::set_handler"); let args = GenerateArgs { define: self.option, init: true,