aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index 35ae66d..8470651 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,9 +5,10 @@ use figment::{
Figment,
};
use projectr::{project::ProjectItem, search::Search, Cli, Config};
+use tokio::signal;
-#[tracing::instrument]
-fn main() -> Result<()> {
+#[tokio::main]
+async fn main() -> Result<()> {
let cli = Cli::parse();
let config: Config = Figment::new()
@@ -23,11 +24,16 @@ fn main() -> Result<()> {
.with_max_level(cli.verbosity)
.init();
- run(&config).context("Failed to run projectr")
+ let res = tokio::select! {
+ res = signal::ctrl_c() => res.map_err(Into::into),
+ res = run(&config) => res.context("Failed to run projectr"),
+ };
+
+ res
}
#[tracing::instrument]
-pub fn run(config: &Config) -> Result<()> {
+pub async fn run(config: &Config) -> Result<()> {
let mut projects: Vec<ProjectItem> = Search::from(config.paths.to_owned()).collect();
projects.sort_unstable_by_key(|p| *p.timestamp());