diff --git a/src/animation/renderer.rs b/src/animation/renderer.rs index 5434b20..798d838 100644 --- a/src/animation/renderer.rs +++ b/src/animation/renderer.rs @@ -2,6 +2,7 @@ use crate::animation::{easing::EasingFunction, effects::Effect, timeline::Timeli use crate::color::{apply, ColorEngine}; use crate::utils::{ansi, ascii::AsciiArt, terminal::TerminalManager}; use anyhow::Result; +use crossterm::event::{self, Event, KeyCode, KeyModifiers}; use tokio::time::sleep; pub struct Renderer<'a> { @@ -37,6 +38,18 @@ impl<'a> Renderer<'a> { loop { let frame_start = std::time::Instant::now(); + // Check for Ctrl+C or 'q' to exit + if event::poll(std::time::Duration::from_millis(0))? { + if let Event::Key(key) = event::read()? { + if key.code == KeyCode::Char('c') && key.modifiers.contains(KeyModifiers::CONTROL) { + break; + } + if key.code == KeyCode::Char('q') || key.code == KeyCode::Esc { + break; + } + } + } + // Calculate progress with easing let linear_progress = timeline.progress(); let eased_progress = self.easing.ease(linear_progress);