Current section

Files

Jump to
chrobot src chrobot internal keymap.gleam
Raw

src/chrobot/internal/keymap.gleam

//// These are hardcoded keyboard definitions for a US keyboard layout.
//// They are used to map human readable key values to payloads for `input.dispatch_key_event`.
//// The mappings have been pilfered from here:
////
//// https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/common/USKeyboardLayout.ts
////
//// This version is a bit simplified, we don't include handling for pressing shift+key to get a different character.
//// Instead users should just use that character directly as the input string.
////
//// The mapping was translated by Github Copilot, so there may be some errors.
import gleam/option.{type Option, None, Some}
/// For reference see the parameters here:
/// https://chromedevtools.github.io/devtools-protocol/tot/Input/#method-dispatchKeyEvent
pub type KeyData {
KeyData(
// The 'windows virtual key code' which is a number
key_code: Option(Int),
// For example 'KeyA' or 'Digit0' or 'Enter'
code: Option(String),
// The actual key value, for example 'a' or '0' or '\r'
key: Option(String),
// Text as generated by processing a virtual key code with a keyboard layout
text: Option(String),
// The location on the keyboard (1=Left, 2=Right)
location: Option(Int),
)
}
/// From a human readable string like "a" "0" or "Enter" or "ArrowLeft",
/// return the corresponding KeyData that can be sent to the browser
/// via the dispatchKeyEvent method.
pub fn get_key_data(input: String) {
case input {
"0" ->
Ok(KeyData(
key_code: Some(48),
code: Some("Digit0"),
key: Some("0"),
location: None,
text: None,
))
"1" ->
Ok(KeyData(
key_code: Some(49),
code: Some("Digit1"),
key: Some("1"),
location: None,
text: None,
))
"2" ->
Ok(KeyData(
key_code: Some(50),
code: Some("Digit2"),
key: Some("2"),
location: None,
text: None,
))
"3" ->
Ok(KeyData(
key_code: Some(51),
code: Some("Digit3"),
key: Some("3"),
location: None,
text: None,
))
"4" ->
Ok(KeyData(
key_code: Some(52),
code: Some("Digit4"),
key: Some("4"),
location: None,
text: None,
))
"5" ->
Ok(KeyData(
key_code: Some(53),
code: Some("Digit5"),
key: Some("5"),
location: None,
text: None,
))
"6" ->
Ok(KeyData(
key_code: Some(54),
code: Some("Digit6"),
key: Some("6"),
location: None,
text: None,
))
"7" ->
Ok(KeyData(
key_code: Some(55),
code: Some("Digit7"),
key: Some("7"),
location: None,
text: None,
))
"8" ->
Ok(KeyData(
key_code: Some(56),
code: Some("Digit8"),
key: Some("8"),
location: None,
text: None,
))
"9" ->
Ok(KeyData(
key_code: Some(57),
code: Some("Digit9"),
key: Some("9"),
location: None,
text: None,
))
"Power" ->
Ok(KeyData(
key_code: None,
code: Some("Power"),
key: Some("Power"),
location: None,
text: None,
))
"Eject" ->
Ok(KeyData(
key_code: None,
code: Some("Eject"),
key: Some("Eject"),
location: None,
text: None,
))
"Abort" ->
Ok(KeyData(
key_code: Some(3),
code: Some("Abort"),
key: Some("Cancel"),
location: None,
text: None,
))
"Help" ->
Ok(KeyData(
key_code: Some(6),
code: Some("Help"),
key: Some("Help"),
location: None,
text: None,
))
"Backspace" ->
Ok(KeyData(
key_code: Some(8),
code: Some("Backspace"),
key: Some("Backspace"),
location: None,
text: None,
))
"Tab" ->
Ok(KeyData(
key_code: Some(9),
code: Some("Tab"),
key: Some("Tab"),
location: None,
text: None,
))
"Numpad5" ->
Ok(KeyData(
key_code: Some(12),
code: Some("Numpad5"),
key: Some("Clear"),
location: Some(3),
text: None,
))
"NumpadEnter" ->
Ok(KeyData(
key_code: Some(13),
code: Some("NumpadEnter"),
key: Some("Enter"),
location: Some(3),
text: Some("\r"),
))
"Enter" ->
Ok(KeyData(
key_code: Some(13),
code: Some("Enter"),
key: Some("Enter"),
location: None,
text: Some("\r"),
))
"\r" ->
Ok(KeyData(
key_code: Some(13),
code: Some("Enter"),
key: Some("Enter"),
location: None,
text: Some("\r"),
))
"\n" ->
Ok(KeyData(
key_code: Some(13),
code: Some("Enter"),
key: Some("Enter"),
location: None,
text: Some("\r"),
))
"ShiftLeft" ->
Ok(KeyData(
key_code: Some(16),
code: Some("ShiftLeft"),
key: Some("Shift"),
location: Some(1),
text: None,
))
"ShiftRight" ->
Ok(KeyData(
key_code: Some(16),
code: Some("ShiftRight"),
key: Some("Shift"),
location: Some(2),
text: None,
))
"ControlLeft" ->
Ok(KeyData(
key_code: Some(17),
code: Some("ControlLeft"),
key: Some("Control"),
location: Some(1),
text: None,
))
"ControlRight" ->
Ok(KeyData(
key_code: Some(17),
code: Some("ControlRight"),
key: Some("Control"),
location: Some(2),
text: None,
))
"AltLeft" ->
Ok(KeyData(
key_code: Some(18),
code: Some("AltLeft"),
key: Some("Alt"),
location: Some(1),
text: None,
))
"AltRight" ->
Ok(KeyData(
key_code: Some(18),
code: Some("AltRight"),
key: Some("Alt"),
location: Some(2),
text: None,
))
"Pause" ->
Ok(KeyData(
key_code: Some(19),
code: Some("Pause"),
key: Some("Pause"),
location: None,
text: None,
))
"CapsLock" ->
Ok(KeyData(
key_code: Some(20),
code: Some("CapsLock"),
key: Some("CapsLock"),
location: None,
text: None,
))
"Escape" ->
Ok(KeyData(
key_code: Some(27),
code: Some("Escape"),
key: Some("Escape"),
location: None,
text: None,
))
"Convert" ->
Ok(KeyData(
key_code: Some(28),
code: Some("Convert"),
key: Some("Convert"),
location: None,
text: None,
))
"NonConvert" ->
Ok(KeyData(
key_code: Some(29),
code: Some("NonConvert"),
key: Some("NonConvert"),
location: None,
text: None,
))
"Space" ->
Ok(KeyData(
key_code: Some(32),
code: Some("Space"),
key: Some(" "),
location: None,
text: None,
))
"Numpad9" ->
Ok(KeyData(
key_code: Some(33),
code: Some("Numpad9"),
key: Some("PageUp"),
location: Some(3),
text: None,
))
"PageUp" ->
Ok(KeyData(
key_code: Some(33),
code: Some("PageUp"),
key: Some("PageUp"),
location: None,
text: None,
))
"Numpad3" ->
Ok(KeyData(
key_code: Some(34),
code: Some("Numpad3"),
key: Some("PageDown"),
location: Some(3),
text: None,
))
"PageDown" ->
Ok(KeyData(
key_code: Some(34),
code: Some("PageDown"),
key: Some("PageDown"),
location: None,
text: None,
))
"End" ->
Ok(KeyData(
key_code: Some(35),
code: Some("End"),
key: Some("End"),
location: None,
text: None,
))
"Numpad1" ->
Ok(KeyData(
key_code: Some(35),
code: Some("Numpad1"),
key: Some("End"),
location: Some(3),
text: None,
))
"Home" ->
Ok(KeyData(
key_code: Some(36),
code: Some("Home"),
key: Some("Home"),
location: None,
text: None,
))
"Numpad7" ->
Ok(KeyData(
key_code: Some(36),
code: Some("Numpad7"),
key: Some("Home"),
location: Some(3),
text: None,
))
"ArrowLeft" ->
Ok(KeyData(
key_code: Some(37),
code: Some("ArrowLeft"),
key: Some("ArrowLeft"),
location: None,
text: None,
))
"Numpad4" ->
Ok(KeyData(
key_code: Some(37),
code: Some("Numpad4"),
key: Some("ArrowLeft"),
location: Some(3),
text: None,
))
"Numpad8" ->
Ok(KeyData(
key_code: Some(38),
code: Some("Numpad8"),
key: Some("ArrowUp"),
location: Some(3),
text: None,
))
"ArrowUp" ->
Ok(KeyData(
key_code: Some(38),
code: Some("ArrowUp"),
key: Some("ArrowUp"),
location: None,
text: None,
))
"ArrowRight" ->
Ok(KeyData(
key_code: Some(39),
code: Some("ArrowRight"),
key: Some("ArrowRight"),
location: None,
text: None,
))
"Numpad6" ->
Ok(KeyData(
key_code: Some(39),
code: Some("Numpad6"),
key: Some("ArrowRight"),
location: Some(3),
text: None,
))
"Numpad2" ->
Ok(KeyData(
key_code: Some(40),
code: Some("Numpad2"),
key: Some("ArrowDown"),
location: Some(3),
text: None,
))
"ArrowDown" ->
Ok(KeyData(
key_code: Some(40),
code: Some("ArrowDown"),
key: Some("ArrowDown"),
location: None,
text: None,
))
"Select" ->
Ok(KeyData(
key_code: Some(41),
code: Some("Select"),
key: Some("Select"),
location: None,
text: None,
))
"Open" ->
Ok(KeyData(
key_code: Some(43),
code: Some("Open"),
key: Some("Execute"),
location: None,
text: None,
))
"PrintScreen" ->
Ok(KeyData(
key_code: Some(44),
code: Some("PrintScreen"),
key: Some("PrintScreen"),
location: None,
text: None,
))
"Insert" ->
Ok(KeyData(
key_code: Some(45),
code: Some("Insert"),
key: Some("Insert"),
location: None,
text: None,
))
"Numpad0" ->
Ok(KeyData(
key_code: Some(45),
code: Some("Numpad0"),
key: Some("Insert"),
location: Some(3),
text: None,
))
"Delete" ->
Ok(KeyData(
key_code: Some(46),
code: Some("Delete"),
key: Some("Delete"),
location: None,
text: None,
))
"NumpadDecimal" ->
Ok(KeyData(
key_code: Some(46),
code: Some("NumpadDecimal"),
key: Some("\\u0000"),
location: Some(3),
text: None,
))
"Digit0" ->
Ok(KeyData(
key_code: Some(48),
code: Some("Digit0"),
key: Some("0"),
location: None,
text: None,
))
"Digit1" ->
Ok(KeyData(
key_code: Some(49),
code: Some("Digit1"),
key: Some("1"),
location: None,
text: None,
))
"Digit2" ->
Ok(KeyData(
key_code: Some(50),
code: Some("Digit2"),
key: Some("2"),
location: None,
text: None,
))
"Digit3" ->
Ok(KeyData(
key_code: Some(51),
code: Some("Digit3"),
key: Some("3"),
location: None,
text: None,
))
"Digit4" ->
Ok(KeyData(
key_code: Some(52),
code: Some("Digit4"),
key: Some("4"),
location: None,
text: None,
))
"Digit5" ->
Ok(KeyData(
key_code: Some(53),
code: Some("Digit5"),
key: Some("5"),
location: None,
text: None,
))
"Digit6" ->
Ok(KeyData(
key_code: Some(54),
code: Some("Digit6"),
key: Some("6"),
location: None,
text: None,
))
"Digit7" ->
Ok(KeyData(
key_code: Some(55),
code: Some("Digit7"),
key: Some("7"),
location: None,
text: None,
))
"Digit8" ->
Ok(KeyData(
key_code: Some(56),
code: Some("Digit8"),
key: Some("8"),
location: None,
text: None,
))
"Digit9" ->
Ok(KeyData(
key_code: Some(57),
code: Some("Digit9"),
key: Some("9"),
location: None,
text: None,
))
"KeyA" ->
Ok(KeyData(
key_code: Some(65),
code: Some("KeyA"),
key: Some("a"),
location: None,
text: None,
))
"KeyB" ->
Ok(KeyData(
key_code: Some(66),
code: Some("KeyB"),
key: Some("b"),
location: None,
text: None,
))
"KeyC" ->
Ok(KeyData(
key_code: Some(67),
code: Some("KeyC"),
key: Some("c"),
location: None,
text: None,
))
"KeyD" ->
Ok(KeyData(
key_code: Some(68),
code: Some("KeyD"),
key: Some("d"),
location: None,
text: None,
))
"KeyE" ->
Ok(KeyData(
key_code: Some(69),
code: Some("KeyE"),
key: Some("e"),
location: None,
text: None,
))
"KeyF" ->
Ok(KeyData(
key_code: Some(70),
code: Some("KeyF"),
key: Some("f"),
location: None,
text: None,
))
"KeyG" ->
Ok(KeyData(
key_code: Some(71),
code: Some("KeyG"),
key: Some("g"),
location: None,
text: None,
))
"KeyH" ->
Ok(KeyData(
key_code: Some(72),
code: Some("KeyH"),
key: Some("h"),
location: None,
text: None,
))
"KeyI" ->
Ok(KeyData(
key_code: Some(73),
code: Some("KeyI"),
key: Some("i"),
location: None,
text: None,
))
"KeyJ" ->
Ok(KeyData(
key_code: Some(74),
code: Some("KeyJ"),
key: Some("j"),
location: None,
text: None,
))
"KeyK" ->
Ok(KeyData(
key_code: Some(75),
code: Some("KeyK"),
key: Some("k"),
location: None,
text: None,
))
"KeyL" ->
Ok(KeyData(
key_code: Some(76),
code: Some("KeyL"),
key: Some("l"),
location: None,
text: None,
))
"KeyM" ->
Ok(KeyData(
key_code: Some(77),
code: Some("KeyM"),
key: Some("m"),
location: None,
text: None,
))
"KeyN" ->
Ok(KeyData(
key_code: Some(78),
code: Some("KeyN"),
key: Some("n"),
location: None,
text: None,
))
"KeyO" ->
Ok(KeyData(
key_code: Some(79),
code: Some("KeyO"),
key: Some("o"),
location: None,
text: None,
))
"KeyP" ->
Ok(KeyData(
key_code: Some(80),
code: Some("KeyP"),
key: Some("p"),
location: None,
text: None,
))
"KeyQ" ->
Ok(KeyData(
key_code: Some(81),
code: Some("KeyQ"),
key: Some("q"),
location: None,
text: None,
))
"KeyR" ->
Ok(KeyData(
key_code: Some(82),
code: Some("KeyR"),
key: Some("r"),
location: None,
text: None,
))
"KeyS" ->
Ok(KeyData(
key_code: Some(83),
code: Some("KeyS"),
key: Some("s"),
location: None,
text: None,
))
"KeyT" ->
Ok(KeyData(
key_code: Some(84),
code: Some("KeyT"),
key: Some("t"),
location: None,
text: None,
))
"KeyU" ->
Ok(KeyData(
key_code: Some(85),
code: Some("KeyU"),
key: Some("u"),
location: None,
text: None,
))
"KeyV" ->
Ok(KeyData(
key_code: Some(86),
code: Some("KeyV"),
key: Some("v"),
location: None,
text: None,
))
"KeyW" ->
Ok(KeyData(
key_code: Some(87),
code: Some("KeyW"),
key: Some("w"),
location: None,
text: None,
))
"KeyX" ->
Ok(KeyData(
key_code: Some(88),
code: Some("KeyX"),
key: Some("x"),
location: None,
text: None,
))
"KeyY" ->
Ok(KeyData(
key_code: Some(89),
code: Some("KeyY"),
key: Some("y"),
location: None,
text: None,
))
"KeyZ" ->
Ok(KeyData(
key_code: Some(90),
code: Some("KeyZ"),
key: Some("z"),
location: None,
text: None,
))
"MetaLeft" ->
Ok(KeyData(
key_code: Some(91),
code: Some("MetaLeft"),
key: Some("Meta"),
location: Some(1),
text: None,
))
"MetaRight" ->
Ok(KeyData(
key_code: Some(92),
code: Some("MetaRight"),
key: Some("Meta"),
location: Some(2),
text: None,
))
"ContextMenu" ->
Ok(KeyData(
key_code: Some(93),
code: Some("ContextMenu"),
key: Some("ContextMenu"),
location: None,
text: None,
))
"NumpadMultiply" ->
Ok(KeyData(
key_code: Some(106),
code: Some("NumpadMultiply"),
key: Some("*"),
location: Some(3),
text: None,
))
"NumpadAdd" ->
Ok(KeyData(
key_code: Some(107),
code: Some("NumpadAdd"),
key: Some("+"),
location: Some(3),
text: None,
))
"NumpadSubtract" ->
Ok(KeyData(
key_code: Some(109),
code: Some("NumpadSubtract"),
key: Some("-"),
location: Some(3),
text: None,
))
"NumpadDivide" ->
Ok(KeyData(
key_code: Some(111),
code: Some("NumpadDivide"),
key: Some("/"),
location: Some(3),
text: None,
))
"F1" ->
Ok(KeyData(
key_code: Some(112),
code: Some("F1"),
key: Some("F1"),
location: None,
text: None,
))
"F2" ->
Ok(KeyData(
key_code: Some(113),
code: Some("F2"),
key: Some("F2"),
location: None,
text: None,
))
"F3" ->
Ok(KeyData(
key_code: Some(114),
code: Some("F3"),
key: Some("F3"),
location: None,
text: None,
))
"F4" ->
Ok(KeyData(
key_code: Some(115),
code: Some("F4"),
key: Some("F4"),
location: None,
text: None,
))
"F5" ->
Ok(KeyData(
key_code: Some(116),
code: Some("F5"),
key: Some("F5"),
location: None,
text: None,
))
"F6" ->
Ok(KeyData(
key_code: Some(117),
code: Some("F6"),
key: Some("F6"),
location: None,
text: None,
))
"F7" ->
Ok(KeyData(
key_code: Some(118),
code: Some("F7"),
key: Some("F7"),
location: None,
text: None,
))
"F8" ->
Ok(KeyData(
key_code: Some(119),
code: Some("F8"),
key: Some("F8"),
location: None,
text: None,
))
"F9" ->
Ok(KeyData(
key_code: Some(120),
code: Some("F9"),
key: Some("F9"),
location: None,
text: None,
))
"F10" ->
Ok(KeyData(
key_code: Some(121),
code: Some("F10"),
key: Some("F10"),
location: None,
text: None,
))
"F11" ->
Ok(KeyData(
key_code: Some(122),
code: Some("F11"),
key: Some("F11"),
location: None,
text: None,
))
"F12" ->
Ok(KeyData(
key_code: Some(123),
code: Some("F12"),
key: Some("F12"),
location: None,
text: None,
))
"F13" ->
Ok(KeyData(
key_code: Some(124),
code: Some("F13"),
key: Some("F13"),
location: None,
text: None,
))
"F14" ->
Ok(KeyData(
key_code: Some(125),
code: Some("F14"),
key: Some("F14"),
location: None,
text: None,
))
"F15" ->
Ok(KeyData(
key_code: Some(126),
code: Some("F15"),
key: Some("F15"),
location: None,
text: None,
))
"F16" ->
Ok(KeyData(
key_code: Some(127),
code: Some("F16"),
key: Some("F16"),
location: None,
text: None,
))
"F17" ->
Ok(KeyData(
key_code: Some(128),
code: Some("F17"),
key: Some("F17"),
location: None,
text: None,
))
"F18" ->
Ok(KeyData(
key_code: Some(129),
code: Some("F18"),
key: Some("F18"),
location: None,
text: None,
))
"F19" ->
Ok(KeyData(
key_code: Some(130),
code: Some("F19"),
key: Some("F19"),
location: None,
text: None,
))
"F20" ->
Ok(KeyData(
key_code: Some(131),
code: Some("F20"),
key: Some("F20"),
location: None,
text: None,
))
"F21" ->
Ok(KeyData(
key_code: Some(132),
code: Some("F21"),
key: Some("F21"),
location: None,
text: None,
))
"F22" ->
Ok(KeyData(
key_code: Some(133),
code: Some("F22"),
key: Some("F22"),
location: None,
text: None,
))
"F23" ->
Ok(KeyData(
key_code: Some(134),
code: Some("F23"),
key: Some("F23"),
location: None,
text: None,
))
"F24" ->
Ok(KeyData(
key_code: Some(135),
code: Some("F24"),
key: Some("F24"),
location: None,
text: None,
))
"NumLock" ->
Ok(KeyData(
key_code: Some(144),
code: Some("NumLock"),
key: Some("NumLock"),
location: None,
text: None,
))
"ScrollLock" ->
Ok(KeyData(
key_code: Some(145),
code: Some("ScrollLock"),
key: Some("ScrollLock"),
location: None,
text: None,
))
"AudioVolumeMute" ->
Ok(KeyData(
key_code: Some(173),
code: Some("AudioVolumeMute"),
key: Some("AudioVolumeMute"),
location: None,
text: None,
))
"AudioVolumeDown" ->
Ok(KeyData(
key_code: Some(174),
code: Some("AudioVolumeDown"),
key: Some("AudioVolumeDown"),
location: None,
text: None,
))
"AudioVolumeUp" ->
Ok(KeyData(
key_code: Some(175),
code: Some("AudioVolumeUp"),
key: Some("AudioVolumeUp"),
location: None,
text: None,
))
"MediaTrackNext" ->
Ok(KeyData(
key_code: Some(176),
code: Some("MediaTrackNext"),
key: Some("MediaTrackNext"),
location: None,
text: None,
))
"MediaTrackPrevious" ->
Ok(KeyData(
key_code: Some(177),
code: Some("MediaTrackPrevious"),
key: Some("MediaTrackPrevious"),
location: None,
text: None,
))
"MediaStop" ->
Ok(KeyData(
key_code: Some(178),
code: Some("MediaStop"),
key: Some("MediaStop"),
location: None,
text: None,
))
"MediaPlayPause" ->
Ok(KeyData(
key_code: Some(179),
code: Some("MediaPlayPause"),
key: Some("MediaPlayPause"),
location: None,
text: None,
))
"Semicolon" ->
Ok(KeyData(
key_code: Some(186),
code: Some("Semicolon"),
key: Some(";"),
location: None,
text: None,
))
"Equal" ->
Ok(KeyData(
key_code: Some(187),
code: Some("Equal"),
key: Some("="),
location: None,
text: None,
))
"NumpadEqual" ->
Ok(KeyData(
key_code: Some(187),
code: Some("NumpadEqual"),
key: Some("="),
location: Some(3),
text: None,
))
"Comma" ->
Ok(KeyData(
key_code: Some(188),
code: Some("Comma"),
key: Some(","),
location: None,
text: None,
))
"Minus" ->
Ok(KeyData(
key_code: Some(189),
code: Some("Minus"),
key: Some("-"),
location: None,
text: None,
))
"Period" ->
Ok(KeyData(
key_code: Some(190),
code: Some("Period"),
key: Some("."),
location: None,
text: None,
))
"Slash" ->
Ok(KeyData(
key_code: Some(191),
code: Some("Slash"),
key: Some("/"),
location: None,
text: None,
))
"Backquote" ->
Ok(KeyData(
key_code: Some(192),
code: Some("Backquote"),
key: Some("`"),
location: None,
text: None,
))
"BracketLeft" ->
Ok(KeyData(
key_code: Some(219),
code: Some("BracketLeft"),
key: Some("["),
location: None,
text: None,
))
"Backslash" ->
Ok(KeyData(
key_code: Some(220),
code: Some("Backslash"),
key: Some("\\"),
location: None,
text: None,
))
"BracketRight" ->
Ok(KeyData(
key_code: Some(221),
code: Some("BracketRight"),
key: Some("]"),
location: None,
text: None,
))
"Quote" ->
Ok(KeyData(
key_code: Some(222),
code: Some("Quote"),
key: Some("'"),
location: None,
text: None,
))
"AltGraph" ->
Ok(KeyData(
key_code: Some(225),
code: Some("AltGraph"),
key: Some("AltGraph"),
location: None,
text: None,
))
"Props" ->
Ok(KeyData(
key_code: Some(247),
code: Some("Props"),
key: Some("CrSel"),
location: None,
text: None,
))
"Cancel" ->
Ok(KeyData(
key_code: Some(3),
code: Some("Abort"),
key: Some("Cancel"),
location: None,
text: None,
))
"Clear" ->
Ok(KeyData(
key_code: Some(12),
code: Some("Numpad5"),
key: Some("Clear"),
location: Some(3),
text: None,
))
"Shift" ->
Ok(KeyData(
key_code: Some(16),
code: Some("ShiftLeft"),
key: Some("Shift"),
location: Some(1),
text: None,
))
"Control" ->
Ok(KeyData(
key_code: Some(17),
code: Some("ControlLeft"),
key: Some("Control"),
location: Some(1),
text: None,
))
"Alt" ->
Ok(KeyData(
key_code: Some(18),
code: Some("AltLeft"),
key: Some("Alt"),
location: Some(1),
text: None,
))
"Accept" ->
Ok(KeyData(
key_code: Some(30),
code: None,
key: Some("Accept"),
location: None,
text: None,
))
"ModeChange" ->
Ok(KeyData(
key_code: Some(31),
code: None,
key: Some("ModeChange"),
location: None,
text: None,
))
" " ->
Ok(KeyData(
key_code: Some(32),
code: Some("Space"),
key: Some(" "),
location: None,
text: None,
))
"Print" ->
Ok(KeyData(
key_code: Some(42),
code: None,
key: Some("Print"),
location: None,
text: None,
))
"Execute" ->
Ok(KeyData(
key_code: Some(43),
code: Some("Open"),
key: Some("Execute"),
location: None,
text: None,
))
"\\u0000" ->
Ok(KeyData(
key_code: Some(46),
code: Some("NumpadDecimal"),
key: Some("\\u0000"),
location: Some(3),
text: None,
))
"a" ->
Ok(KeyData(
key_code: Some(65),
code: Some("KeyA"),
key: Some("a"),
location: None,
text: None,
))
"b" ->
Ok(KeyData(
key_code: Some(66),
code: Some("KeyB"),
key: Some("b"),
location: None,
text: None,
))
"c" ->
Ok(KeyData(
key_code: Some(67),
code: Some("KeyC"),
key: Some("c"),
location: None,
text: None,
))
"d" ->
Ok(KeyData(
key_code: Some(68),
code: Some("KeyD"),
key: Some("d"),
location: None,
text: None,
))
"e" ->
Ok(KeyData(
key_code: Some(69),
code: Some("KeyE"),
key: Some("e"),
location: None,
text: None,
))
"f" ->
Ok(KeyData(
key_code: Some(70),
code: Some("KeyF"),
key: Some("f"),
location: None,
text: None,
))
"g" ->
Ok(KeyData(
key_code: Some(71),
code: Some("KeyG"),
key: Some("g"),
location: None,
text: None,
))
"h" ->
Ok(KeyData(
key_code: Some(72),
code: Some("KeyH"),
key: Some("h"),
location: None,
text: None,
))
"i" ->
Ok(KeyData(
key_code: Some(73),
code: Some("KeyI"),
key: Some("i"),
location: None,
text: None,
))
"j" ->
Ok(KeyData(
key_code: Some(74),
code: Some("KeyJ"),
key: Some("j"),
location: None,
text: None,
))
"k" ->
Ok(KeyData(
key_code: Some(75),
code: Some("KeyK"),
key: Some("k"),
location: None,
text: None,
))
"l" ->
Ok(KeyData(
key_code: Some(76),
code: Some("KeyL"),
key: Some("l"),
location: None,
text: None,
))
"m" ->
Ok(KeyData(
key_code: Some(77),
code: Some("KeyM"),
key: Some("m"),
location: None,
text: None,
))
"n" ->
Ok(KeyData(
key_code: Some(78),
code: Some("KeyN"),
key: Some("n"),
location: None,
text: None,
))
"o" ->
Ok(KeyData(
key_code: Some(79),
code: Some("KeyO"),
key: Some("o"),
location: None,
text: None,
))
"p" ->
Ok(KeyData(
key_code: Some(80),
code: Some("KeyP"),
key: Some("p"),
location: None,
text: None,
))
"q" ->
Ok(KeyData(
key_code: Some(81),
code: Some("KeyQ"),
key: Some("q"),
location: None,
text: None,
))
"r" ->
Ok(KeyData(
key_code: Some(82),
code: Some("KeyR"),
key: Some("r"),
location: None,
text: None,
))
"s" ->
Ok(KeyData(
key_code: Some(83),
code: Some("KeyS"),
key: Some("s"),
location: None,
text: None,
))
"t" ->
Ok(KeyData(
key_code: Some(84),
code: Some("KeyT"),
key: Some("t"),
location: None,
text: None,
))
"u" ->
Ok(KeyData(
key_code: Some(85),
code: Some("KeyU"),
key: Some("u"),
location: None,
text: None,
))
"v" ->
Ok(KeyData(
key_code: Some(86),
code: Some("KeyV"),
key: Some("v"),
location: None,
text: None,
))
"w" ->
Ok(KeyData(
key_code: Some(87),
code: Some("KeyW"),
key: Some("w"),
location: None,
text: None,
))
"x" ->
Ok(KeyData(
key_code: Some(88),
code: Some("KeyX"),
key: Some("x"),
location: None,
text: None,
))
"y" ->
Ok(KeyData(
key_code: Some(89),
code: Some("KeyY"),
key: Some("y"),
location: None,
text: None,
))
"z" ->
Ok(KeyData(
key_code: Some(90),
code: Some("KeyZ"),
key: Some("z"),
location: None,
text: None,
))
"Meta" ->
Ok(KeyData(
key_code: Some(91),
code: Some("MetaLeft"),
key: Some("Meta"),
location: Some(1),
text: None,
))
"*" ->
Ok(KeyData(
key_code: Some(106),
code: Some("NumpadMultiply"),
key: Some("*"),
location: Some(3),
text: None,
))
"+" ->
Ok(KeyData(
key_code: Some(107),
code: Some("NumpadAdd"),
key: Some("+"),
location: Some(3),
text: None,
))
"-" ->
Ok(KeyData(
key_code: Some(109),
code: Some("NumpadSubtract"),
key: Some("-"),
location: Some(3),
text: None,
))
"/" ->
Ok(KeyData(
key_code: Some(111),
code: Some("NumpadDivide"),
key: Some("/"),
location: Some(3),
text: None,
))
";" ->
Ok(KeyData(
key_code: Some(186),
code: Some("Semicolon"),
key: Some(";"),
location: None,
text: None,
))
"=" ->
Ok(KeyData(
key_code: Some(187),
code: Some("Equal"),
key: Some("="),
location: None,
text: None,
))
"," ->
Ok(KeyData(
key_code: Some(188),
code: Some("Comma"),
key: Some(","),
location: None,
text: None,
))
"." ->
Ok(KeyData(
key_code: Some(190),
code: Some("Period"),
key: Some("."),
location: None,
text: None,
))
"`" ->
Ok(KeyData(
key_code: Some(192),
code: Some("Backquote"),
key: Some("`"),
location: None,
text: None,
))
"[" ->
Ok(KeyData(
key_code: Some(219),
code: Some("BracketLeft"),
key: Some("["),
location: None,
text: None,
))
"\\" ->
Ok(KeyData(
key_code: Some(220),
code: Some("Backslash"),
key: Some("\\"),
location: None,
text: None,
))
"]" ->
Ok(KeyData(
key_code: Some(221),
code: Some("BracketRight"),
key: Some("]"),
location: None,
text: None,
))
"'" ->
Ok(KeyData(
key_code: Some(222),
code: Some("Quote"),
key: Some("'"),
location: None,
text: None,
))
"Attn" ->
Ok(KeyData(
key_code: Some(246),
code: None,
key: Some("Attn"),
location: None,
text: None,
))
"CrSel" ->
Ok(KeyData(
key_code: Some(247),
code: Some("Props"),
key: Some("CrSel"),
location: None,
text: None,
))
"ExSel" ->
Ok(KeyData(
key_code: Some(248),
code: None,
key: Some("ExSel"),
location: None,
text: None,
))
"EraseEof" ->
Ok(KeyData(
key_code: Some(249),
code: None,
key: Some("EraseEof"),
location: None,
text: None,
))
"Play" ->
Ok(KeyData(
key_code: Some(250),
code: None,
key: Some("Play"),
location: None,
text: None,
))
"ZoomOut" ->
Ok(KeyData(
key_code: Some(251),
code: None,
key: Some("ZoomOut"),
location: None,
text: None,
))
")" ->
Ok(KeyData(
key_code: Some(48),
code: Some("Digit0"),
key: Some(")"),
location: None,
text: None,
))
"!" ->
Ok(KeyData(
key_code: Some(49),
code: Some("Digit1"),
key: Some("!"),
location: None,
text: None,
))
"@" ->
Ok(KeyData(
key_code: Some(50),
code: Some("Digit2"),
key: Some("@"),
location: None,
text: None,
))
"#" ->
Ok(KeyData(
key_code: Some(51),
code: Some("Digit3"),
key: Some("#"),
location: None,
text: None,
))
"$" ->
Ok(KeyData(
key_code: Some(52),
code: Some("Digit4"),
key: Some("$"),
location: None,
text: None,
))
"%" ->
Ok(KeyData(
key_code: Some(53),
code: Some("Digit5"),
key: Some("%"),
location: None,
text: None,
))
"^" ->
Ok(KeyData(
key_code: Some(54),
code: Some("Digit6"),
key: Some("^"),
location: None,
text: None,
))
"&" ->
Ok(KeyData(
key_code: Some(55),
code: Some("Digit7"),
key: Some("&"),
location: None,
text: None,
))
"(" ->
Ok(KeyData(
key_code: Some(57),
code: Some("Digit9"),
key: Some("("),
location: None,
text: None,
))
"A" ->
Ok(KeyData(
key_code: Some(65),
code: Some("KeyA"),
key: Some("A"),
location: None,
text: None,
))
"B" ->
Ok(KeyData(
key_code: Some(66),
code: Some("KeyB"),
key: Some("B"),
location: None,
text: None,
))
"C" ->
Ok(KeyData(
key_code: Some(67),
code: Some("KeyC"),
key: Some("C"),
location: None,
text: None,
))
"D" ->
Ok(KeyData(
key_code: Some(68),
code: Some("KeyD"),
key: Some("D"),
location: None,
text: None,
))
"E" ->
Ok(KeyData(
key_code: Some(69),
code: Some("KeyE"),
key: Some("E"),
location: None,
text: None,
))
"F" ->
Ok(KeyData(
key_code: Some(70),
code: Some("KeyF"),
key: Some("F"),
location: None,
text: None,
))
"G" ->
Ok(KeyData(
key_code: Some(71),
code: Some("KeyG"),
key: Some("G"),
location: None,
text: None,
))
"H" ->
Ok(KeyData(
key_code: Some(72),
code: Some("KeyH"),
key: Some("H"),
location: None,
text: None,
))
"I" ->
Ok(KeyData(
key_code: Some(73),
code: Some("KeyI"),
key: Some("I"),
location: None,
text: None,
))
"J" ->
Ok(KeyData(
key_code: Some(74),
code: Some("KeyJ"),
key: Some("J"),
location: None,
text: None,
))
"K" ->
Ok(KeyData(
key_code: Some(75),
code: Some("KeyK"),
key: Some("K"),
location: None,
text: None,
))
"L" ->
Ok(KeyData(
key_code: Some(76),
code: Some("KeyL"),
key: Some("L"),
location: None,
text: None,
))
"M" ->
Ok(KeyData(
key_code: Some(77),
code: Some("KeyM"),
key: Some("M"),
location: None,
text: None,
))
"N" ->
Ok(KeyData(
key_code: Some(78),
code: Some("KeyN"),
key: Some("N"),
location: None,
text: None,
))
"O" ->
Ok(KeyData(
key_code: Some(79),
code: Some("KeyO"),
key: Some("O"),
location: None,
text: None,
))
"P" ->
Ok(KeyData(
key_code: Some(80),
code: Some("KeyP"),
key: Some("P"),
location: None,
text: None,
))
"Q" ->
Ok(KeyData(
key_code: Some(81),
code: Some("KeyQ"),
key: Some("Q"),
location: None,
text: None,
))
"R" ->
Ok(KeyData(
key_code: Some(82),
code: Some("KeyR"),
key: Some("R"),
location: None,
text: None,
))
"S" ->
Ok(KeyData(
key_code: Some(83),
code: Some("KeyS"),
key: Some("S"),
location: None,
text: None,
))
"T" ->
Ok(KeyData(
key_code: Some(84),
code: Some("KeyT"),
key: Some("T"),
location: None,
text: None,
))
"U" ->
Ok(KeyData(
key_code: Some(85),
code: Some("KeyU"),
key: Some("U"),
location: None,
text: None,
))
"V" ->
Ok(KeyData(
key_code: Some(86),
code: Some("KeyV"),
key: Some("V"),
location: None,
text: None,
))
"W" ->
Ok(KeyData(
key_code: Some(87),
code: Some("KeyW"),
key: Some("W"),
location: None,
text: None,
))
"X" ->
Ok(KeyData(
key_code: Some(88),
code: Some("KeyX"),
key: Some("X"),
location: None,
text: None,
))
"Y" ->
Ok(KeyData(
key_code: Some(89),
code: Some("KeyY"),
key: Some("Y"),
location: None,
text: None,
))
"Z" ->
Ok(KeyData(
key_code: Some(90),
code: Some("KeyZ"),
key: Some("Z"),
location: None,
text: None,
))
":" ->
Ok(KeyData(
key_code: Some(186),
code: Some("Semicolon"),
key: Some(":"),
location: None,
text: None,
))
"<" ->
Ok(KeyData(
key_code: Some(188),
code: Some("Comma"),
key: Some("<"),
location: None,
text: None,
))
"_" ->
Ok(KeyData(
key_code: Some(189),
code: Some("Minus"),
key: Some("_"),
location: None,
text: None,
))
">" ->
Ok(KeyData(
key_code: Some(190),
code: Some("Period"),
key: Some(">"),
location: None,
text: None,
))
"?" ->
Ok(KeyData(
key_code: Some(191),
code: Some("Slash"),
key: Some("?"),
location: None,
text: None,
))
"~" ->
Ok(KeyData(
key_code: Some(192),
code: Some("Backquote"),
key: Some("~"),
location: None,
text: None,
))
"{" ->
Ok(KeyData(
key_code: Some(219),
code: Some("BracketLeft"),
key: Some("{"),
location: None,
text: None,
))
"|" ->
Ok(KeyData(
key_code: Some(220),
code: Some("Backslash"),
key: Some("|"),
location: None,
text: None,
))
"}" ->
Ok(KeyData(
key_code: Some(221),
code: Some("BracketRight"),
key: Some("}"),
location: None,
text: None,
))
"\"" ->
Ok(KeyData(
key_code: Some(222),
code: Some("Quote"),
key: Some("\""),
location: None,
text: None,
))
"SoftLeft" ->
Ok(KeyData(
key_code: None,
code: Some("SoftLeft"),
key: Some("SoftLeft"),
location: Some(4),
text: None,
))
"SoftRight" ->
Ok(KeyData(
key_code: None,
code: Some("SoftRight"),
key: Some("SoftRight"),
location: Some(4),
text: None,
))
"Camera" ->
Ok(KeyData(
key_code: Some(44),
code: Some("Camera"),
key: Some("Camera"),
location: Some(4),
text: None,
))
"Call" ->
Ok(KeyData(
key_code: None,
code: Some("Call"),
key: Some("Call"),
location: Some(4),
text: None,
))
"EndCall" ->
Ok(KeyData(
key_code: Some(95),
code: Some("EndCall"),
key: Some("EndCall"),
location: Some(4),
text: None,
))
"VolumeDown" ->
Ok(KeyData(
key_code: Some(182),
code: Some("VolumeDown"),
key: Some("VolumeDown"),
location: Some(4),
text: None,
))
"VolumeUp" ->
Ok(KeyData(
key_code: Some(183),
code: Some("VolumeUp"),
key: Some("VolumeUp"),
location: Some(4),
text: None,
))
_ -> {
Error(Nil)
}
}
}