pub struct KeyEvent {
pub code: KeyCode,
pub kind: KeyEventKind,
pub modifiers: Modifiers,
pub state: KeyEventState,
}Expand description
A key event plus modifiers and protocol state.
KeyEvent appears inside Event::Key, which is normally returned by EventReader::read
or Terminal::read. See EventReader for examples of filtering key events while leaving
other terminal events buffered.
code identifies the key, kind distinguishes press/release/repeat when the terminal reports
that detail, modifiers carries held modifier keys, and state carries protocol state such as
keypad-originated input.
Code that handles shortcuts should usually check kind == KeyEventKind::Press before acting.
Unix-style terminal input commonly reports only presses unless a keyboard enhancement protocol
requests event types, but the Windows legacy console API reports press and release records for
many keys. Ignoring kind can make a shortcut run twice on backends that expose releases.
Some key combinations also cannot be represented by some terminals at all. Crossterm’s missing key combinations issue is a useful catalogue of those terminal-level limitations; report Termina bugs in Termina, not on that upstream issue.
§Implementation Notes
This mirrors the layout used by crossterm key events.
Fields§
§code: KeyCodeThe key identity.
kind: KeyEventKindWhether this event is a press, release, or repeat.
Check this before triggering a shortcut or command. If the command should run once per
physical key press, require KeyEventKind::Press and ignore release events.
modifiers: ModifiersModifier keys active for this key event.
This is the modifier state Termina could infer from the terminal protocol or platform backend. Plain terminal input does not report every modifier independently; for example, Shift may be inferred from an uppercase decoded character, while lock-key and keypad state require an enhanced keyboard protocol or platform backend that reports them.
state: KeyEventStateExtra key state reported by the terminal protocol.
This is empty unless the input source reports state outside the ordinary modifier mask, such as keypad-originated input, Caps Lock, or Num Lock.