diff --git a/src/edit/display.rs b/src/edit/display.rs index cb002e0..78b30e2 100644 --- a/src/edit/display.rs +++ b/src/edit/display.rs @@ -279,7 +279,18 @@ impl Display { } fn input_event(&mut self) -> Result { - match (self.term.read_key()?, &self.state) { + let key = match self.term.read_key() { + Ok(key) => key, + Err(err) => { + if err.kind() == std::io::ErrorKind::Interrupted { + return Ok(RunningState::Finished); + } + + return Err(err.into()); + } + }; + + match (key, &self.state) { //movement //up (Key::ArrowUp, DisplayState::Package) => { diff --git a/src/main.rs b/src/main.rs index 1f6e779..f6f579c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,5 @@ #![warn(clippy::unwrap_used)] -use std::process::exit; - use clap::{Args, CommandFactory, Parser, Subcommand}; use clap_complete::{Shell, generate}; use color_eyre::Result; @@ -91,8 +89,6 @@ fn run(args: FeaturesArgs) -> Result<()> { let _ = ctrlc::set_handler(|| { let term = Term::stdout(); term.show_cursor().expect("could not enable cursor"); - - exit(0); }); if let Some(sub) = args.sub { @@ -108,7 +104,12 @@ fn run(args: FeaturesArgs) -> Result<()> { display.set_selected_dep(name)? } - display.start()?; + if let Err(err) = display.start() { + // print empty line so we can see the error message + println!(); + + return Err(err); + } } Ok(())