diff options
| author | mo8it <mo8it@proton.me> | 2024-05-13 16:39:38 +0200 |
|---|---|---|
| committer | mo8it <mo8it@proton.me> | 2024-05-13 16:39:38 +0200 |
| commit | a7bc6d53a56e105b4d8ad558ef533ee7ecb6aaea (patch) | |
| tree | c8fad862983f6ae9cf0410e5409775dde77d8813 | |
| parent | 56eb4a5d650e6bb671fe60b8cc746b19e9c5f3d4 (diff) | |
Only send `Unrecognized` on ENTER if the last input wasn't valid
| -rw-r--r-- | src/watch/terminal_event.rs | 47 |
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(_, _) => { |
