Why am I getting duplicate key events on Windows?
A lot of examples out there in the wild might use the following code for sending key presses:
CrosstermEvent::Key(e) => tx.send(Event::Key(e)),
However, on Windows, when using Crossterm
, this will send the same Event::Key(e)
twice; one for
when you press the key, i.e. KeyEventKind::Press
and one for when you release the key, i.e.
KeyEventKind::Release
. On MacOS
and Linux
only KeyEventKind::Press
kinds of key
event is
generated.
To make the code work as expected across all platforms, you can do this instead:
CrosstermEvent::Key(key) => {
if key.kind == KeyEventKind::Press {
event_tx.send(Event::Key(key)).unwrap();
}
},