Skip to main content

Crate kbd_crossterm

Crate kbd_crossterm 

Source
Expand description

Crossterm key event conversions for kbd.

This crate converts crossterm’s key events into kbd’s unified types so you can use kbd’s Dispatcher, hotkey parsing, layers, and sequences in a TUI app.

Crossterm reports keys as characters (Char('a')) and modifier bitflags, while kbd uses physical key positions (Key::A) and typed Modifier values.

§Extension traits

§Key mapping

CrosstermkbdNotes
Char('a')Char('z')Key::AKey::ZCase-insensitive
Char('0')Char('9')Key::DIGIT0Key::DIGIT9
Char('-'), Char('='), …Key::MINUS, Key::EQUAL, …Physical position
F(1)F(35)Key::F1Key::F35F(0) and F(36+)None
Enter, Esc, Tab, …Key::ENTER, Key::ESCAPE, Key::TAB, …Named keys
Media(PlayPause), …Key::MEDIA_PLAY_PAUSE, …Media keys
Modifier(LeftControl), …Key::CONTROL_LEFT, …Modifier keys as triggers
BackTab, Null, KeypadBeginNoneNo kbd equivalent
Non-ASCII Char (e.g., 'é')NoneNo physical key mapping

§Modifier mapping

Crosstermkbd
CONTROLModifier::Ctrl
SHIFTModifier::Shift
ALTModifier::Alt
SUPERModifier::Super
HYPER, META(ignored)

§Usage

use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use kbd::prelude::*;
use kbd_crossterm::{CrosstermEventExt, CrosstermKeyExt, CrosstermModifiersExt};

// Single key conversion
let key = KeyCode::Char('a').to_key();
assert_eq!(key, Some(Key::A));

// Modifier conversion
let mods = KeyModifiers::CONTROL.to_modifiers();
assert_eq!(mods, vec![Modifier::Ctrl]);

// Full event conversion
let event = KeyEvent::new(KeyCode::Char('c'), KeyModifiers::CONTROL);
let hotkey = event.to_hotkey();
assert_eq!(hotkey, Some(Hotkey::new(Key::C).modifier(Modifier::Ctrl)));

Traits§

CrosstermEventExt
Convert a crossterm KeyEvent to a kbd Hotkey.
CrosstermKeyExt
Convert a crossterm KeyCode to a kbd Key.
CrosstermModifiersExt
Convert crossterm KeyModifiers bitflags to a sorted Vec<Modifier>.