aboutsummaryrefslogtreecommitdiff
path: root/src/event.rs
diff options
context:
space:
mode:
authorMroik <mroik@delayed.space>2025-01-27 17:43:32 +0100
committerMroik <mroik@delayed.space>2025-02-01 19:33:03 +0100
commit5bd36b139d8ba07bce7edb8828beec3f114b3271 (patch)
tree05ea85542c182e7cc91de4f0c340b71d4a07618e /src/event.rs
parent3c6073f6b08a7e812e2f1f22bb3882427e980663 (diff)
Implement app loop
Diffstat (limited to 'src/event.rs')
-rw-r--r--src/event.rs37
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(());
+}
XMR address: 854DmXNrxULU3ZFJVs4Wc8PFhbq29RhqHhY8W6cdWrtFN3qmooKyyeYPcDzZTNRxphhJ5UzASQfAdEMwSteVqymk28aLhqj