app
Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
master
John Lauer
rust: Phase 2 part 1 (tabs, input, dialogs, viewport, history, fetch, render_html, maximize; event pump; recovery + hea…
6da4234
2mo ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
//! US keyboard layout for Input.dispatchKeyEvent (generated by tools/gen-keys.py from puppeteer-core's USKeyboardLayout.js, Apache-2.0).
pub struct KeyDef { pub key: &'static str, pub code: &'static str, pub key_code: u32, pub text: Option<&'static str>, pub shift_key: Option<&'static str>, pub shift_key_code: Option<u32>, pub location: u32 }
pub static KEYS: &[(&str, KeyDef)] = &[
("0", KeyDef { key: "0", code: "Digit0", key_code: 48, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("1", KeyDef { key: "1", code: "Digit1", key_code: 49, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("2", KeyDef { key: "2", code: "Digit2", key_code: 50, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("3", KeyDef { key: "3", code: "Digit3", key_code: 51, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("4", KeyDef { key: "4", code: "Digit4", key_code: 52, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("5", KeyDef { key: "5", code: "Digit5", key_code: 53, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("6", KeyDef { key: "6", code: "Digit6", key_code: 54, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("7", KeyDef { key: "7", code: "Digit7", key_code: 55, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("8", KeyDef { key: "8", code: "Digit8", key_code: 56, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("9", KeyDef { key: "9", code: "Digit9", key_code: 57, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Power", KeyDef { key: "Power", code: "Power", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Eject", KeyDef { key: "Eject", code: "Eject", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Abort", KeyDef { key: "Cancel", code: "Abort", key_code: 3, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Help", KeyDef { key: "Help", code: "Help", key_code: 6, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Backspace", KeyDef { key: "Backspace", code: "Backspace", key_code: 8, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Tab", KeyDef { key: "Tab", code: "Tab", key_code: 9, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad5", KeyDef { key: "Clear", code: "Numpad5", key_code: 12, text: None, shift_key: Some("5"), shift_key_code: Some(101), location: 3 }),
("NumpadEnter", KeyDef { key: "Enter", code: "NumpadEnter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 3 }),
("Enter", KeyDef { key: "Enter", code: "Enter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 0 }),
("\\r", KeyDef { key: "Enter", code: "Enter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 0 }),
("\\n", KeyDef { key: "Enter", code: "Enter", key_code: 13, text: Some("\u{d}"), shift_key: None, shift_key_code: None, location: 0 }),
("ShiftLeft", KeyDef { key: "Shift", code: "ShiftLeft", key_code: 16, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("ShiftRight", KeyDef { key: "Shift", code: "ShiftRight", key_code: 16, text: None, shift_key: None, shift_key_code: None, location: 2 }),
("ControlLeft", KeyDef { key: "Control", code: "ControlLeft", key_code: 17, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("ControlRight", KeyDef { key: "Control", code: "ControlRight", key_code: 17, text: None, shift_key: None, shift_key_code: None, location: 2 }),
("AltLeft", KeyDef { key: "Alt", code: "AltLeft", key_code: 18, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("AltRight", KeyDef { key: "Alt", code: "AltRight", key_code: 18, text: None, shift_key: None, shift_key_code: None, location: 2 }),
("Pause", KeyDef { key: "Pause", code: "Pause", key_code: 19, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("CapsLock", KeyDef { key: "CapsLock", code: "CapsLock", key_code: 20, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Escape", KeyDef { key: "Escape", code: "Escape", key_code: 27, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Convert", KeyDef { key: "Convert", code: "Convert", key_code: 28, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("NonConvert", KeyDef { key: "NonConvert", code: "NonConvert", key_code: 29, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Space", KeyDef { key: " ", code: "Space", key_code: 32, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad9", KeyDef { key: "PageUp", code: "Numpad9", key_code: 33, text: None, shift_key: Some("9"), shift_key_code: Some(105), location: 3 }),
("PageUp", KeyDef { key: "PageUp", code: "PageUp", key_code: 33, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad3", KeyDef { key: "PageDown", code: "Numpad3", key_code: 34, text: None, shift_key: Some("3"), shift_key_code: Some(99), location: 3 }),
("PageDown", KeyDef { key: "PageDown", code: "PageDown", key_code: 34, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("End", KeyDef { key: "End", code: "End", key_code: 35, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad1", KeyDef { key: "End", code: "Numpad1", key_code: 35, text: None, shift_key: Some("1"), shift_key_code: Some(97), location: 3 }),
("Home", KeyDef { key: "Home", code: "Home", key_code: 36, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad7", KeyDef { key: "Home", code: "Numpad7", key_code: 36, text: None, shift_key: Some("7"), shift_key_code: Some(103), location: 3 }),
("ArrowLeft", KeyDef { key: "ArrowLeft", code: "ArrowLeft", key_code: 37, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad4", KeyDef { key: "ArrowLeft", code: "Numpad4", key_code: 37, text: None, shift_key: Some("4"), shift_key_code: Some(100), location: 3 }),
("Numpad8", KeyDef { key: "ArrowUp", code: "Numpad8", key_code: 38, text: None, shift_key: Some("8"), shift_key_code: Some(104), location: 3 }),
("ArrowUp", KeyDef { key: "ArrowUp", code: "ArrowUp", key_code: 38, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("ArrowRight", KeyDef { key: "ArrowRight", code: "ArrowRight", key_code: 39, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad6", KeyDef { key: "ArrowRight", code: "Numpad6", key_code: 39, text: None, shift_key: Some("6"), shift_key_code: Some(102), location: 3 }),
("Numpad2", KeyDef { key: "ArrowDown", code: "Numpad2", key_code: 40, text: None, shift_key: Some("2"), shift_key_code: Some(98), location: 3 }),
("ArrowDown", KeyDef { key: "ArrowDown", code: "ArrowDown", key_code: 40, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Select", KeyDef { key: "Select", code: "Select", key_code: 41, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Open", KeyDef { key: "Execute", code: "Open", key_code: 43, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("PrintScreen", KeyDef { key: "PrintScreen", code: "PrintScreen", key_code: 44, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Insert", KeyDef { key: "Insert", code: "Insert", key_code: 45, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Numpad0", KeyDef { key: "Insert", code: "Numpad0", key_code: 45, text: None, shift_key: Some("0"), shift_key_code: Some(96), location: 3 }),
("Delete", KeyDef { key: "Delete", code: "Delete", key_code: 46, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("NumpadDecimal", KeyDef { key: "\u{0}", code: "NumpadDecimal", key_code: 46, text: None, shift_key: Some("."), shift_key_code: Some(110), location: 3 }),
("Digit0", KeyDef { key: "0", code: "Digit0", key_code: 48, text: None, shift_key: Some(")"), shift_key_code: None, location: 0 }),
("Digit1", KeyDef { key: "1", code: "Digit1", key_code: 49, text: None, shift_key: Some("!"), shift_key_code: None, location: 0 }),
("Digit2", KeyDef { key: "2", code: "Digit2", key_code: 50, text: None, shift_key: Some("@"), shift_key_code: None, location: 0 }),
("Digit3", KeyDef { key: "3", code: "Digit3", key_code: 51, text: None, shift_key: Some("#"), shift_key_code: None, location: 0 }),
("Digit4", KeyDef { key: "4", code: "Digit4", key_code: 52, text: None, shift_key: Some("$"), shift_key_code: None, location: 0 }),
("Digit5", KeyDef { key: "5", code: "Digit5", key_code: 53, text: None, shift_key: Some("%"), shift_key_code: None, location: 0 }),
("Digit6", KeyDef { key: "6", code: "Digit6", key_code: 54, text: None, shift_key: Some("^"), shift_key_code: None, location: 0 }),
("Digit7", KeyDef { key: "7", code: "Digit7", key_code: 55, text: None, shift_key: Some("&"), shift_key_code: None, location: 0 }),
("Digit8", KeyDef { key: "8", code: "Digit8", key_code: 56, text: None, shift_key: Some("*"), shift_key_code: None, location: 0 }),
("Digit9", KeyDef { key: "9", code: "Digit9", key_code: 57, text: None, shift_key: Some("("), shift_key_code: None, location: 0 }),
("KeyA", KeyDef { key: "a", code: "KeyA", key_code: 65, text: None, shift_key: Some("A"), shift_key_code: None, location: 0 }),
("KeyB", KeyDef { key: "b", code: "KeyB", key_code: 66, text: None, shift_key: Some("B"), shift_key_code: None, location: 0 }),
("KeyC", KeyDef { key: "c", code: "KeyC", key_code: 67, text: None, shift_key: Some("C"), shift_key_code: None, location: 0 }),
("KeyD", KeyDef { key: "d", code: "KeyD", key_code: 68, text: None, shift_key: Some("D"), shift_key_code: None, location: 0 }),
("KeyE", KeyDef { key: "e", code: "KeyE", key_code: 69, text: None, shift_key: Some("E"), shift_key_code: None, location: 0 }),
("KeyF", KeyDef { key: "f", code: "KeyF", key_code: 70, text: None, shift_key: Some("F"), shift_key_code: None, location: 0 }),
("KeyG", KeyDef { key: "g", code: "KeyG", key_code: 71, text: None, shift_key: Some("G"), shift_key_code: None, location: 0 }),
("KeyH", KeyDef { key: "h", code: "KeyH", key_code: 72, text: None, shift_key: Some("H"), shift_key_code: None, location: 0 }),
("KeyI", KeyDef { key: "i", code: "KeyI", key_code: 73, text: None, shift_key: Some("I"), shift_key_code: None, location: 0 }),
("KeyJ", KeyDef { key: "j", code: "KeyJ", key_code: 74, text: None, shift_key: Some("J"), shift_key_code: None, location: 0 }),
("KeyK", KeyDef { key: "k", code: "KeyK", key_code: 75, text: None, shift_key: Some("K"), shift_key_code: None, location: 0 }),
("KeyL", KeyDef { key: "l", code: "KeyL", key_code: 76, text: None, shift_key: Some("L"), shift_key_code: None, location: 0 }),
("KeyM", KeyDef { key: "m", code: "KeyM", key_code: 77, text: None, shift_key: Some("M"), shift_key_code: None, location: 0 }),
("KeyN", KeyDef { key: "n", code: "KeyN", key_code: 78, text: None, shift_key: Some("N"), shift_key_code: None, location: 0 }),
("KeyO", KeyDef { key: "o", code: "KeyO", key_code: 79, text: None, shift_key: Some("O"), shift_key_code: None, location: 0 }),
("KeyP", KeyDef { key: "p", code: "KeyP", key_code: 80, text: None, shift_key: Some("P"), shift_key_code: None, location: 0 }),
("KeyQ", KeyDef { key: "q", code: "KeyQ", key_code: 81, text: None, shift_key: Some("Q"), shift_key_code: None, location: 0 }),
("KeyR", KeyDef { key: "r", code: "KeyR", key_code: 82, text: None, shift_key: Some("R"), shift_key_code: None, location: 0 }),
("KeyS", KeyDef { key: "s", code: "KeyS", key_code: 83, text: None, shift_key: Some("S"), shift_key_code: None, location: 0 }),
("KeyT", KeyDef { key: "t", code: "KeyT", key_code: 84, text: None, shift_key: Some("T"), shift_key_code: None, location: 0 }),
("KeyU", KeyDef { key: "u", code: "KeyU", key_code: 85, text: None, shift_key: Some("U"), shift_key_code: None, location: 0 }),
("KeyV", KeyDef { key: "v", code: "KeyV", key_code: 86, text: None, shift_key: Some("V"), shift_key_code: None, location: 0 }),
("KeyW", KeyDef { key: "w", code: "KeyW", key_code: 87, text: None, shift_key: Some("W"), shift_key_code: None, location: 0 }),
("KeyX", KeyDef { key: "x", code: "KeyX", key_code: 88, text: None, shift_key: Some("X"), shift_key_code: None, location: 0 }),
("KeyY", KeyDef { key: "y", code: "KeyY", key_code: 89, text: None, shift_key: Some("Y"), shift_key_code: None, location: 0 }),
("KeyZ", KeyDef { key: "z", code: "KeyZ", key_code: 90, text: None, shift_key: Some("Z"), shift_key_code: None, location: 0 }),
("MetaLeft", KeyDef { key: "Meta", code: "MetaLeft", key_code: 91, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("MetaRight", KeyDef { key: "Meta", code: "MetaRight", key_code: 92, text: None, shift_key: None, shift_key_code: None, location: 2 }),
("ContextMenu", KeyDef { key: "ContextMenu", code: "ContextMenu", key_code: 93, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("NumpadMultiply", KeyDef { key: "*", code: "NumpadMultiply", key_code: 106, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("NumpadAdd", KeyDef { key: "+", code: "NumpadAdd", key_code: 107, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("NumpadSubtract", KeyDef { key: "-", code: "NumpadSubtract", key_code: 109, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("NumpadDivide", KeyDef { key: "/", code: "NumpadDivide", key_code: 111, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("F1", KeyDef { key: "F1", code: "F1", key_code: 112, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F2", KeyDef { key: "F2", code: "F2", key_code: 113, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F3", KeyDef { key: "F3", code: "F3", key_code: 114, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F4", KeyDef { key: "F4", code: "F4", key_code: 115, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F5", KeyDef { key: "F5", code: "F5", key_code: 116, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F6", KeyDef { key: "F6", code: "F6", key_code: 117, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F7", KeyDef { key: "F7", code: "F7", key_code: 118, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F8", KeyDef { key: "F8", code: "F8", key_code: 119, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F9", KeyDef { key: "F9", code: "F9", key_code: 120, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F10", KeyDef { key: "F10", code: "F10", key_code: 121, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F11", KeyDef { key: "F11", code: "F11", key_code: 122, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F12", KeyDef { key: "F12", code: "F12", key_code: 123, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F13", KeyDef { key: "F13", code: "F13", key_code: 124, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F14", KeyDef { key: "F14", code: "F14", key_code: 125, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F15", KeyDef { key: "F15", code: "F15", key_code: 126, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F16", KeyDef { key: "F16", code: "F16", key_code: 127, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F17", KeyDef { key: "F17", code: "F17", key_code: 128, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F18", KeyDef { key: "F18", code: "F18", key_code: 129, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F19", KeyDef { key: "F19", code: "F19", key_code: 130, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F20", KeyDef { key: "F20", code: "F20", key_code: 131, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F21", KeyDef { key: "F21", code: "F21", key_code: 132, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F22", KeyDef { key: "F22", code: "F22", key_code: 133, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F23", KeyDef { key: "F23", code: "F23", key_code: 134, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F24", KeyDef { key: "F24", code: "F24", key_code: 135, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("NumLock", KeyDef { key: "NumLock", code: "NumLock", key_code: 144, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("ScrollLock", KeyDef { key: "ScrollLock", code: "ScrollLock", key_code: 145, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("AudioVolumeMute", KeyDef { key: "AudioVolumeMute", code: "AudioVolumeMute", key_code: 173, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("AudioVolumeDown", KeyDef { key: "AudioVolumeDown", code: "AudioVolumeDown", key_code: 174, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("AudioVolumeUp", KeyDef { key: "AudioVolumeUp", code: "AudioVolumeUp", key_code: 175, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("MediaTrackNext", KeyDef { key: "MediaTrackNext", code: "MediaTrackNext", key_code: 176, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("MediaTrackPrevious", KeyDef { key: "MediaTrackPrevious", code: "MediaTrackPrevious", key_code: 177, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("MediaStop", KeyDef { key: "MediaStop", code: "MediaStop", key_code: 178, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("MediaPlayPause", KeyDef { key: "MediaPlayPause", code: "MediaPlayPause", key_code: 179, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Semicolon", KeyDef { key: ";", code: "Semicolon", key_code: 186, text: None, shift_key: Some(":"), shift_key_code: None, location: 0 }),
("Equal", KeyDef { key: "=", code: "Equal", key_code: 187, text: None, shift_key: Some("+"), shift_key_code: None, location: 0 }),
("NumpadEqual", KeyDef { key: "=", code: "NumpadEqual", key_code: 187, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("Comma", KeyDef { key: ",", code: "Comma", key_code: 188, text: None, shift_key: Some("<"), shift_key_code: None, location: 0 }),
("Minus", KeyDef { key: "-", code: "Minus", key_code: 189, text: None, shift_key: Some("_"), shift_key_code: None, location: 0 }),
("Period", KeyDef { key: ".", code: "Period", key_code: 190, text: None, shift_key: Some(">"), shift_key_code: None, location: 0 }),
("Slash", KeyDef { key: "/", code: "Slash", key_code: 191, text: None, shift_key: Some("?"), shift_key_code: None, location: 0 }),
("Backquote", KeyDef { key: "`", code: "Backquote", key_code: 192, text: None, shift_key: Some("~"), shift_key_code: None, location: 0 }),
("BracketLeft", KeyDef { key: "[", code: "BracketLeft", key_code: 219, text: None, shift_key: Some("{"), shift_key_code: None, location: 0 }),
("Backslash", KeyDef { key: "\\", code: "Backslash", key_code: 220, text: None, shift_key: Some("|"), shift_key_code: None, location: 0 }),
("BracketRight", KeyDef { key: "BracketRight", code: "BracketRight", key_code: 221, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Quote", KeyDef { key: "Quote", code: "Quote", key_code: 222, text: None, shift_key: Some("\""), shift_key_code: None, location: 0 }),
("AltGraph", KeyDef { key: "AltGraph", code: "AltGraph", key_code: 225, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Props", KeyDef { key: "CrSel", code: "Props", key_code: 247, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Cancel", KeyDef { key: "Cancel", code: "Abort", key_code: 3, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Clear", KeyDef { key: "Clear", code: "Numpad5", key_code: 12, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("Shift", KeyDef { key: "Shift", code: "ShiftLeft", key_code: 16, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("Control", KeyDef { key: "Control", code: "ControlLeft", key_code: 17, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("Alt", KeyDef { key: "Alt", code: "AltLeft", key_code: 18, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("Accept", KeyDef { key: "Accept", code: "", key_code: 30, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("ModeChange", KeyDef { key: "ModeChange", code: "", key_code: 31, text: None, shift_key: None, shift_key_code: None, location: 0 }),
(" ", KeyDef { key: " ", code: "Space", key_code: 32, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Print", KeyDef { key: "Print", code: "", key_code: 42, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Execute", KeyDef { key: "Execute", code: "Open", key_code: 43, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("\\u0000", KeyDef { key: "\u{0}", code: "NumpadDecimal", key_code: 46, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("a", KeyDef { key: "a", code: "KeyA", key_code: 65, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("b", KeyDef { key: "b", code: "KeyB", key_code: 66, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("c", KeyDef { key: "c", code: "KeyC", key_code: 67, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("d", KeyDef { key: "d", code: "KeyD", key_code: 68, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("e", KeyDef { key: "e", code: "KeyE", key_code: 69, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("f", KeyDef { key: "f", code: "KeyF", key_code: 70, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("g", KeyDef { key: "g", code: "KeyG", key_code: 71, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("h", KeyDef { key: "h", code: "KeyH", key_code: 72, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("i", KeyDef { key: "i", code: "KeyI", key_code: 73, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("j", KeyDef { key: "j", code: "KeyJ", key_code: 74, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("k", KeyDef { key: "k", code: "KeyK", key_code: 75, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("l", KeyDef { key: "l", code: "KeyL", key_code: 76, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("m", KeyDef { key: "m", code: "KeyM", key_code: 77, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("n", KeyDef { key: "n", code: "KeyN", key_code: 78, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("o", KeyDef { key: "o", code: "KeyO", key_code: 79, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("p", KeyDef { key: "p", code: "KeyP", key_code: 80, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("q", KeyDef { key: "q", code: "KeyQ", key_code: 81, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("r", KeyDef { key: "r", code: "KeyR", key_code: 82, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("s", KeyDef { key: "s", code: "KeyS", key_code: 83, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("t", KeyDef { key: "t", code: "KeyT", key_code: 84, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("u", KeyDef { key: "u", code: "KeyU", key_code: 85, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("v", KeyDef { key: "v", code: "KeyV", key_code: 86, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("w", KeyDef { key: "w", code: "KeyW", key_code: 87, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("x", KeyDef { key: "x", code: "KeyX", key_code: 88, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("y", KeyDef { key: "y", code: "KeyY", key_code: 89, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("z", KeyDef { key: "z", code: "KeyZ", key_code: 90, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Meta", KeyDef { key: "Meta", code: "MetaLeft", key_code: 91, text: None, shift_key: None, shift_key_code: None, location: 1 }),
("*", KeyDef { key: "*", code: "NumpadMultiply", key_code: 106, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("+", KeyDef { key: "+", code: "NumpadAdd", key_code: 107, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("-", KeyDef { key: "-", code: "NumpadSubtract", key_code: 109, text: None, shift_key: None, shift_key_code: None, location: 3 }),
("/", KeyDef { key: "/", code: "NumpadDivide", key_code: 111, text: None, shift_key: None, shift_key_code: None, location: 3 }),
(";", KeyDef { key: ";", code: "Semicolon", key_code: 186, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("=", KeyDef { key: "=", code: "Equal", key_code: 187, text: None, shift_key: None, shift_key_code: None, location: 0 }),
(",", KeyDef { key: ",", code: "Comma", key_code: 188, text: None, shift_key: None, shift_key_code: None, location: 0 }),
(".", KeyDef { key: ".", code: "Period", key_code: 190, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("`", KeyDef { key: "`", code: "Backquote", key_code: 192, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("[", KeyDef { key: "[", code: "BracketLeft", key_code: 219, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("\\\\", KeyDef { key: "\\", code: "Backslash", key_code: 220, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("]", KeyDef { key: "]", code: "BracketRight", key_code: 221, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Attn", KeyDef { key: "Attn", code: "", key_code: 246, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("CrSel", KeyDef { key: "CrSel", code: "Props", key_code: 247, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("ExSel", KeyDef { key: "ExSel", code: "", key_code: 248, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("EraseEof", KeyDef { key: "EraseEof", code: "", key_code: 249, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Play", KeyDef { key: "Play", code: "", key_code: 250, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("ZoomOut", KeyDef { key: "ZoomOut", code: "", key_code: 251, text: None, shift_key: None, shift_key_code: None, location: 0 }),
(")", KeyDef { key: ")", code: "Digit0", key_code: 48, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("!", KeyDef { key: "!", code: "Digit1", key_code: 49, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("@", KeyDef { key: "@", code: "Digit2", key_code: 50, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("#", KeyDef { key: "#", code: "Digit3", key_code: 51, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("%", KeyDef { key: "%", code: "Digit5", key_code: 53, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("^", KeyDef { key: "^", code: "Digit6", key_code: 54, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("&", KeyDef { key: "&", code: "Digit7", key_code: 55, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("(", KeyDef { key: "(", code: "Digit9", key_code: 57, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("A", KeyDef { key: "A", code: "KeyA", key_code: 65, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("B", KeyDef { key: "B", code: "KeyB", key_code: 66, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("C", KeyDef { key: "C", code: "KeyC", key_code: 67, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("D", KeyDef { key: "D", code: "KeyD", key_code: 68, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("E", KeyDef { key: "E", code: "KeyE", key_code: 69, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("F", KeyDef { key: "F", code: "KeyF", key_code: 70, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("G", KeyDef { key: "G", code: "KeyG", key_code: 71, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("H", KeyDef { key: "H", code: "KeyH", key_code: 72, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("I", KeyDef { key: "I", code: "KeyI", key_code: 73, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("J", KeyDef { key: "J", code: "KeyJ", key_code: 74, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("K", KeyDef { key: "K", code: "KeyK", key_code: 75, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("L", KeyDef { key: "L", code: "KeyL", key_code: 76, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("M", KeyDef { key: "M", code: "KeyM", key_code: 77, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("N", KeyDef { key: "N", code: "KeyN", key_code: 78, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("O", KeyDef { key: "O", code: "KeyO", key_code: 79, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("P", KeyDef { key: "P", code: "KeyP", key_code: 80, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Q", KeyDef { key: "Q", code: "KeyQ", key_code: 81, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("R", KeyDef { key: "R", code: "KeyR", key_code: 82, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("S", KeyDef { key: "S", code: "KeyS", key_code: 83, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("T", KeyDef { key: "T", code: "KeyT", key_code: 84, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("U", KeyDef { key: "U", code: "KeyU", key_code: 85, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("V", KeyDef { key: "V", code: "KeyV", key_code: 86, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("W", KeyDef { key: "W", code: "KeyW", key_code: 87, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("X", KeyDef { key: "X", code: "KeyX", key_code: 88, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Y", KeyDef { key: "Y", code: "KeyY", key_code: 89, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("Z", KeyDef { key: "Z", code: "KeyZ", key_code: 90, text: None, shift_key: None, shift_key_code: None, location: 0 }),
(":", KeyDef { key: ":", code: "Semicolon", key_code: 186, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("<", KeyDef { key: "<", code: "Comma", key_code: 188, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("_", KeyDef { key: "_", code: "Minus", key_code: 189, text: None, shift_key: None, shift_key_code: None, location: 0 }),
(">", KeyDef { key: ">", code: "Period", key_code: 190, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("?", KeyDef { key: "?", code: "Slash", key_code: 191, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("~", KeyDef { key: "~", code: "Backquote", key_code: 192, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("{", KeyDef { key: "{", code: "BracketLeft", key_code: 219, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("|", KeyDef { key: "|", code: "Backslash", key_code: 220, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("}", KeyDef { key: "}", code: "", key_code: 221, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("\"", KeyDef { key: "\"", code: "Quote", key_code: 222, text: None, shift_key: None, shift_key_code: None, location: 0 }),
("SoftLeft", KeyDef { key: "SoftLeft", code: "SoftLeft", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 4 }),
("SoftRight", KeyDef { key: "SoftRight", code: "SoftRight", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 4 }),
("Camera", KeyDef { key: "Camera", code: "Camera", key_code: 44, text: None, shift_key: None, shift_key_code: None, location: 4 }),
("Call", KeyDef { key: "Call", code: "Call", key_code: 0, text: None, shift_key: None, shift_key_code: None, location: 4 }),
("EndCall", KeyDef { key: "EndCall", code: "EndCall", key_code: 95, text: None, shift_key: None, shift_key_code: None, location: 4 }),
("VolumeDown", KeyDef { key: "VolumeDown", code: "VolumeDown", key_code: 182, text: None, shift_key: None, shift_key_code: None, location: 4 }),
("VolumeUp", KeyDef { key: "VolumeUp", code: "VolumeUp", key_code: 183, text: None, shift_key: None, shift_key_code: None, location: 4 }),
];
pub fn lookup(name: &str) -> Option<&'static KeyDef> { KEYS.iter().find(|(n, _)| *n == name).map(|(_, d)| d) }