Skip to main content

KeyEvent

Struct KeyEvent 

Source
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: KeyCode

The key identity.

§kind: KeyEventKind

Whether 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: Modifiers

Modifier 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: KeyEventState

Extra 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.

Implementations§

Source§

impl KeyEvent

Source

pub const fn new(code: KeyCode, modifiers: Modifiers) -> Self

Creates a key-press event with the given key code and modifiers.

Trait Implementations§

Source§

impl Clone for KeyEvent

Source§

fn clone(&self) -> KeyEvent

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for KeyEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<KeyCode> for KeyEvent

Source§

fn from(code: KeyCode) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for KeyEvent

Source§

fn eq(&self, other: &KeyEvent) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for KeyEvent

Source§

impl Eq for KeyEvent

Source§

impl StructuralPartialEq for KeyEvent

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.