summaryrefslogtreecommitdiff
path: root/src/watch/terminal_event.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-09-26 18:15:45 +0200
committermo8it <mo8it@proton.me>2024-09-26 18:15:45 +0200
commit0c79f2ea3e1fd2db54ebe8fba8ed17369a15b365 (patch)
tree956466c44ebfb177ec9e0178e420ae9b2c82d464 /src/watch/terminal_event.rs
parent0e9eb9e87e21b1f95d2fbd8ad24ba8a197172318 (diff)
Reset in prompt with confirmation
Diffstat (limited to 'src/watch/terminal_event.rs')
-rw-r--r--src/watch/terminal_event.rs28
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,
};