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
|
use std::error::Error;
use crossterm::event::{KeyCode, KeyModifiers, read};
use tokio::sync::mpsc::Sender;
#[derive(PartialEq)]
pub enum Event {
Terminate,
KeyPress(char),
Backspace,
Render,
ForceRender,
}
// TODO
// - [ ] Pause on focus lost
// - [ ] Invalidate on paste
pub async fn handle_input(sender: Sender<Event>) -> Result<(), Box<dyn Error>> {
match read()? {
//crossterm::event::Event::FocusGained => todo!(),
//crossterm::event::Event::FocusLost => todo!(),
//crossterm::event::Event::Paste(_) => todo!(),
crossterm::event::Event::Resize(_, _) => sender.send(Event::ForceRender).await?,
crossterm::event::Event::Key(key_event) => match (key_event.code, key_event.modifiers) {
(KeyCode::Char('c'), KeyModifiers::CONTROL) => sender.send(Event::Terminate).await?,
(KeyCode::Backspace, _) => sender.send(Event::Backspace).await?,
(KeyCode::Char(c), _) => sender.send(Event::KeyPress(c)).await?,
_ => (),
},
_ => (),
}
return Ok(());
}
|