summaryrefslogtreecommitdiff
path: root/src/watch/terminal_event.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-05-13 16:39:38 +0200
committermo8it <mo8it@proton.me>2024-05-13 16:39:38 +0200
commita7bc6d53a56e105b4d8ad558ef533ee7ecb6aaea (patch)
treec8fad862983f6ae9cf0410e5409775dde77d8813 /src/watch/terminal_event.rs
parent56eb4a5d650e6bb671fe60b8cc746b19e9c5f3d4 (diff)
Only send `Unrecognized` on ENTER if the last input wasn't valid
Diffstat (limited to 'src/watch/terminal_event.rs')
-rw-r--r--src/watch/terminal_event.rs47
1 files changed, 35 insertions, 12 deletions
diff --git a/src/watch/terminal_event.rs b/src/watch/terminal_event.rs
index 29a672a..f54af17 100644
--- a/src/watch/terminal_event.rs
+++ b/src/watch/terminal_event.rs
@@ -13,6 +13,9 @@ pub enum InputEvent {
}
pub fn terminal_event_handler(tx: Sender<WatchEvent>, manual_run: bool) {
+ // Only send `Unrecognized` on ENTER if the last input wasn't valid.
+ let mut last_input_valid = false;
+
let last_input_event = loop {
let terminal_event = match event::read() {
Ok(v) => v,
@@ -32,22 +35,42 @@ pub fn terminal_event_handler(tx: Sender<WatchEvent>, manual_run: bool) {
}
if key.modifiers != KeyModifiers::NONE {
+ last_input_valid = false;
continue;
}
- if let KeyCode::Char(c) = key.code {
- let input_event = match c {
- 'n' => InputEvent::Next,
- 'h' => InputEvent::Hint,
- 'l' => break InputEvent::List,
- 'q' => break InputEvent::Quit,
- 'r' if manual_run => InputEvent::Run,
- _ => InputEvent::Unrecognized,
- };
-
- if tx.send(WatchEvent::Input(input_event)).is_err() {
- return;
+ let input_event = match key.code {
+ KeyCode::Enter => {
+ if last_input_valid {
+ continue;
+ }
+
+ InputEvent::Unrecognized
+ }
+ KeyCode::Char(c) => {
+ let input_event = match c {
+ 'n' => InputEvent::Next,
+ 'h' => InputEvent::Hint,
+ 'l' => break InputEvent::List,
+ 'q' => break InputEvent::Quit,
+ 'r' if manual_run => InputEvent::Run,
+ _ => {
+ last_input_valid = false;
+ continue;
+ }
+ };
+
+ last_input_valid = true;
+ input_event
}
+ _ => {
+ last_input_valid = false;
+ continue;
+ }
+ };
+
+ if tx.send(WatchEvent::Input(input_event)).is_err() {
+ return;
}
}
Event::Resize(_, _) => {