From bd9b579febc710cc9613151a1c8d0f2cf5e9b8d2 Mon Sep 17 00:00:00 2001 From: Alexandre Pasmantier Date: Mon, 13 Jan 2025 23:54:40 +0100 Subject: [PATCH] refactor: exit application on SIGINT / C-c --- .config/config.toml | 2 +- crates/television/event.rs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.config/config.toml b/.config/config.toml index 2038a5e..c8675d7 100644 --- a/.config/config.toml +++ b/.config/config.toml @@ -74,7 +74,7 @@ theme = "TwoDark" # ------------------------ [keybindings.Channel] # Quit the application -quit = "esc" +quit = ["esc", "ctrl-c"] # Scrolling through entries select_next_entry = ["down", "ctrl-n", "ctrl-j"] select_prev_entry = ["up", "ctrl-p", "ctrl-k"] diff --git a/crates/television/event.rs b/crates/television/event.rs index 1e7a333..faa2858 100644 --- a/crates/television/event.rs +++ b/crates/television/event.rs @@ -14,7 +14,7 @@ use crossterm::event::{ KeyEvent, KeyEventKind, KeyModifiers, }; use serde::{Deserialize, Serialize}; -use tokio::sync::mpsc; +use tokio::{signal, sync::mpsc}; use tracing::{debug, warn}; #[derive(Debug, Clone, Copy)] @@ -160,7 +160,6 @@ impl EventLoop { //let mut reader = crossterm::event::EventStream::new(); tokio::spawn(async move { loop { - //let event = reader.next(); let delay = tokio::time::sleep(tick_interval); let event_available = poll_event(tick_interval); @@ -171,6 +170,10 @@ impl EventLoop { tx.send(Event::Tick).unwrap_or_else(|_| warn!("Unable to send Tick event")); break; }, + _ = signal::ctrl_c() => { + debug!("Received SIGINT"); + tx.send(Event::Input(Key::Ctrl('c'))).unwrap_or_else(|_| warn!("Unable to send Ctrl-C event")); + }, // if `delay` completes, pass to the next event "frame" () = delay => { tx.send(Event::Tick).unwrap_or_else(|_| warn!("Unable to send Tick event"));