From b75a1218bda8b00d821ecead794a354d0dd170a5 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 11 Dec 2023 16:45:44 +0100 Subject: [PATCH] Show cursor after exit in terminal mode --- Cargo.lock | 22 ++++++++++++++++++++++ Cargo.toml | 1 + src/main.rs | 7 +++++++ 3 files changed, 30 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index b1607bc..22c2d12 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,6 +125,7 @@ dependencies = [ "async-trait", "chrono", "console", + "ctrlc", "dirs", "http", "parse_duration", @@ -181,6 +182,16 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "ctrlc" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf" +dependencies = [ + "nix", + "windows-sys 0.48.0", +] + [[package]] name = "dirs" version = "5.0.1" @@ -522,6 +533,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "libc", +] + [[package]] name = "num-traits" version = "0.2.17" diff --git a/Cargo.toml b/Cargo.toml index 27fe06c..b981042 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ members = ["parse_duration"] async-trait = "0.1" chrono = { version = "0.4", features = ["serde"] } console = "0.15" +ctrlc = "3.4" dirs = "5.0" reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features = false } serde = { version = "1.0", features = ["derive"] } diff --git a/src/main.rs b/src/main.rs index 79672a2..7ef739c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use checkbar::{get_click_cmd, print_states, read_click_event, run_click_cmd, Config, MouseButton}; use console::Term; use serde_json::json; +use std::process::exit; use tokio::task; use tokio::time::sleep; @@ -8,6 +9,11 @@ use tokio::time::sleep; async fn main() { if Term::stdout().is_term() { let _ = Term::stdout().hide_cursor(); + let _ = ctrlc::set_handler(|| { + let _ = Term::stdout().show_cursor(); + println!(); + exit(1); + }); } else { println!( "{}", @@ -37,6 +43,7 @@ async fn main() { loop { let config = Config::read(); print_states(&config).await; + let _ = Term::stdout().hide_cursor(); let _ = sleep(config.interval).await; } });