diff options
| author | Mroik <mroik@delayed.space> | 2025-01-27 17:43:32 +0100 |
|---|---|---|
| committer | Mroik <mroik@delayed.space> | 2025-02-01 19:33:03 +0100 |
| commit | 5bd36b139d8ba07bce7edb8828beec3f114b3271 (patch) | |
| tree | 05ea85542c182e7cc91de4f0c340b71d4a07618e /src/event.rs | |
| parent | 3c6073f6b08a7e812e2f1f22bb3882427e980663 (diff) | |
Implement app loop
Diffstat (limited to 'src/event.rs')
| -rw-r--r-- | src/event.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/event.rs b/src/event.rs index 1320c68..d5cdabe 100644 --- a/src/event.rs +++ b/src/event.rs @@ -1,5 +1,42 @@ +use std::{error::Error, time::Duration}; + +use crossterm::event::{poll, read, KeyCode, KeyModifiers}; +use tokio::sync::mpsc::Sender; + +use crate::app::TICK_RATE; + pub enum Event { Terminate, KeyPress(char), Backspace, } + +// TODO +// - [ ] Pause on focus lost +// - [ ] Invalidate on paste +pub async fn handle_input(sender: &Sender<Event>) -> Result<(), Box<dyn Error>> { + if poll(Duration::from_millis(TICK_RATE))? { + match read()? { + //crossterm::event::Event::FocusGained => todo!(), + //crossterm::event::Event::FocusLost => todo!(), + //crossterm::event::Event::Paste(_) => todo!(), + crossterm::event::Event::Key(key_event) => { + if key_event.code == KeyCode::Char('c') + && key_event.modifiers == KeyModifiers::CONTROL + { + sender.send(Event::Terminate).await?; + return Ok(()); + } + if key_event.code == KeyCode::Backspace { + sender.send(Event::Backspace).await?; + return Ok(()); + } + if let KeyCode::Char(c) = key_event.code { + sender.send(Event::KeyPress(c)).await?; + } + } + _ => (), + } + } + return Ok(()); +} |
