blob: 400fcb656858d7dad038dadd6043abb288f94999 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
use std::{error::Error, time::Duration};
use crossterm::event::{poll, read, KeyCode, KeyModifiers};
use tokio::sync::mpsc::Sender;
use crate::app::TICK_RATE;
#[derive(PartialEq)]
pub enum Event {
Terminate,
KeyPress(char),
Backspace,
Render,
}
// 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