Merge pull request #2677 from jasagredo/js/get-single-char-windows

Ignore `KeyEventKind::Release` events when reading a char
This commit is contained in:
Mark Thom
2024-12-05 20:25:25 -07:00
committed by GitHub

View File

@@ -68,7 +68,7 @@ use cpu_time::ProcessTime;
use std::time::{Duration, SystemTime}; use std::time::{Duration, SystemTime};
#[cfg(feature = "repl")] #[cfg(feature = "repl")]
use crossterm::event::{read, Event, KeyCode, KeyEvent, KeyModifiers}; use crossterm::event::{read, Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
#[cfg(feature = "repl")] #[cfg(feature = "repl")]
use crossterm::terminal::{disable_raw_mode, enable_raw_mode}; use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
@@ -111,6 +111,7 @@ pub(crate) fn get_key() -> KeyEvent {
loop { loop {
let key_ = read(); let key_ = read();
if let Ok(Event::Key(key_)) = key_ { if let Ok(Event::Key(key_)) = key_ {
if key_.kind != KeyEventKind::Release {
match key_.code { match key_.code {
KeyCode::Char(_) | KeyCode::Enter | KeyCode::Tab => { KeyCode::Char(_) | KeyCode::Enter | KeyCode::Tab => {
key = key_; key = key_;
@@ -120,6 +121,7 @@ pub(crate) fn get_key() -> KeyEvent {
} }
} }
} }
}
disable_raw_mode().expect("failed to disable raw mode"); disable_raw_mode().expect("failed to disable raw mode");
key key
} }