From edf5c4db30265f89c27d7fef051afb6deaf6b799 Mon Sep 17 00:00:00 2001 From: tobinio Date: Sat, 11 Apr 2026 17:14:12 +0200 Subject: [PATCH] slightly improve strg + c handling --- Cargo.lock | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/input.rs | 17 +++++++++++-- src/main.rs | 5 ++++ 4 files changed, 93 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8a601d1..b1d6f44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,6 +88,21 @@ dependencies = [ "windows-link", ] +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + [[package]] name = "bumpalo" version = "3.20.2" @@ -100,6 +115,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "clap" version = "4.6.0" @@ -185,6 +206,29 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ctrlc" +version = "3.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162" +dependencies = [ + "dispatch2", + "nix", + "windows-sys", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags", + "block2", + "libc", + "objc2", +] + [[package]] name = "either" version = "1.15.0" @@ -337,6 +381,33 @@ dependencies = [ "adler2", ] +[[package]] +name = "nix" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + [[package]] name = "object" version = "0.37.3" @@ -392,6 +463,7 @@ dependencies = [ "clap", "color-eyre", "console", + "ctrlc", "fuzzy-matcher", "indicatif", "itertools", diff --git a/Cargo.toml b/Cargo.toml index ffc9e60..40d698e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2024" clap = { version = "4.6.0", features = ["derive"] } color-eyre = "0.6.5" +ctrlc = "3.4.5" console = "0.16.3" indicatif = "0.18.4" diff --git a/src/input.rs b/src/input.rs index 6e3c86c..cd31f2b 100644 --- a/src/input.rs +++ b/src/input.rs @@ -15,7 +15,14 @@ pub fn input_text(term: &mut Term, default: &str, name: &str) -> Result term.clear_line()?; write!(term, "{}: {}", name, text)?; - let key = term.read_key()?; + let key = match term.read_key() { + Ok(key) => key, + Err(err) => { + term.show_cursor()?; + return Err(err.into()); + } + }; + match key { Key::Enter => { writeln!(term)?; @@ -71,7 +78,13 @@ pub fn input_selection(term: &mut Term, data: Vec<(String, T)>, name: )?; } - let key = term.read_key()?; + let key = match term.read_key() { + Ok(key) => key, + Err(err) => { + term.show_cursor()?; + return Err(err.into()); + } + }; match key { Key::Enter => { let (_, data, text) = matches.first().context(format!("no {} Selected", name))?; diff --git a/src/main.rs b/src/main.rs index 40e930a..4d26eb6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,6 +30,11 @@ enum Commands { } fn main() -> Result<()> { + let _ = ctrlc::set_handler(|| { + let term = Term::stdout(); + term.show_cursor().expect("could not enable cursor"); + }); + let cli = Cli::parse(); match &cli.command { -- 2.51.2