diff options
| author | mo8it <mo8it@proton.me> | 2024-09-26 18:15:45 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-09-26 18:15:45 +0200 |
| commit | 0c79f2ea3e1fd2db54ebe8fba8ed17369a15b365 (patch) | |
| tree | 956466c44ebfb177ec9e0178e420ae9b2c82d464 /src/watch/terminal_event.rs | |
| parent | 0e9eb9e87e21b1f95d2fbd8ad24ba8a197172318 (diff) | |
Reset in prompt with confirmation
Diffstat (limited to 'src/watch/terminal_event.rs')
| -rw-r--r-- | src/watch/terminal_event.rs | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/watch/terminal_event.rs b/src/watch/terminal_event.rs index 050c4ac..1ed681d 100644 --- a/src/watch/terminal_event.rs +++ b/src/watch/terminal_event.rs @@ -1,17 +1,25 @@ use crossterm::event::{self, Event, KeyCode, KeyEventKind}; -use std::sync::{atomic::Ordering::Relaxed, mpsc::Sender}; +use std::sync::{ + atomic::Ordering::Relaxed, + mpsc::{Receiver, Sender}, +}; use super::{WatchEvent, EXERCISE_RUNNING}; pub enum InputEvent { - Run, Next, + Run, Hint, List, + Reset, Quit, } -pub fn terminal_event_handler(sender: Sender<WatchEvent>, manual_run: bool) { +pub fn terminal_event_handler( + sender: Sender<WatchEvent>, + unpause_receiver: Receiver<()>, + manual_run: bool, +) { let last_watch_event = loop { match event::read() { Ok(Event::Key(key)) => { @@ -26,10 +34,22 @@ pub fn terminal_event_handler(sender: Sender<WatchEvent>, manual_run: bool) { let input_event = match key.code { KeyCode::Char('n') => InputEvent::Next, + KeyCode::Char('r') if manual_run => InputEvent::Run, KeyCode::Char('h') => InputEvent::Hint, KeyCode::Char('l') => break WatchEvent::Input(InputEvent::List), + KeyCode::Char('x') => { + if sender.send(WatchEvent::Input(InputEvent::Reset)).is_err() { + return; + } + + // Pause input until quitting the confirmation prompt. + if unpause_receiver.recv().is_err() { + return; + }; + + continue; + } KeyCode::Char('q') => break WatchEvent::Input(InputEvent::Quit), - KeyCode::Char('r') if manual_run => InputEvent::Run, _ => continue, }; |
