aumate 0.2.8

Cross-platform desktop automation library with GUI support
Documentation
//! macOS keycode to Key mapping
#![allow(non_upper_case_globals)]

use crate::eventhooks::types::Key;
use core_graphics::event::CGKeyCode;

// Virtual keycodes from Carbon/Carbon.h
pub const kVK_ANSI_A: CGKeyCode = 0;
pub const kVK_ANSI_S: CGKeyCode = 1;
pub const kVK_ANSI_D: CGKeyCode = 2;
pub const kVK_ANSI_F: CGKeyCode = 3;
pub const kVK_ANSI_H: CGKeyCode = 4;
pub const kVK_ANSI_G: CGKeyCode = 5;
pub const kVK_ANSI_Z: CGKeyCode = 6;
pub const kVK_ANSI_X: CGKeyCode = 7;
pub const kVK_ANSI_C: CGKeyCode = 8;
pub const kVK_ANSI_V: CGKeyCode = 9;
pub const kVK_ISO_Section: CGKeyCode = 10;
pub const kVK_ANSI_B: CGKeyCode = 11;
pub const kVK_ANSI_Q: CGKeyCode = 12;
pub const kVK_ANSI_W: CGKeyCode = 13;
pub const kVK_ANSI_E: CGKeyCode = 14;
pub const kVK_ANSI_R: CGKeyCode = 15;
pub const kVK_ANSI_Y: CGKeyCode = 16;
pub const kVK_ANSI_T: CGKeyCode = 17;
pub const kVK_ANSI_1: CGKeyCode = 18;
pub const kVK_ANSI_2: CGKeyCode = 19;
pub const kVK_ANSI_3: CGKeyCode = 20;
pub const kVK_ANSI_4: CGKeyCode = 21;
pub const kVK_ANSI_6: CGKeyCode = 22;
pub const kVK_ANSI_5: CGKeyCode = 23;
pub const kVK_ANSI_Equal: CGKeyCode = 24;
pub const kVK_ANSI_9: CGKeyCode = 25;
pub const kVK_ANSI_7: CGKeyCode = 26;
pub const kVK_ANSI_Minus: CGKeyCode = 27;
pub const kVK_ANSI_8: CGKeyCode = 28;
pub const kVK_ANSI_0: CGKeyCode = 29;
pub const kVK_ANSI_RightBracket: CGKeyCode = 30;
pub const kVK_ANSI_O: CGKeyCode = 31;
pub const kVK_ANSI_U: CGKeyCode = 32;
pub const kVK_ANSI_LeftBracket: CGKeyCode = 33;
pub const kVK_ANSI_I: CGKeyCode = 34;
pub const kVK_ANSI_P: CGKeyCode = 35;
pub const kVK_Return: CGKeyCode = 36;
pub const kVK_ANSI_L: CGKeyCode = 37;
pub const kVK_ANSI_J: CGKeyCode = 38;
pub const kVK_ANSI_Quote: CGKeyCode = 39;
pub const kVK_ANSI_K: CGKeyCode = 40;
pub const kVK_ANSI_Semicolon: CGKeyCode = 41;
pub const kVK_ANSI_Backslash: CGKeyCode = 42;
pub const kVK_ANSI_Comma: CGKeyCode = 43;
pub const kVK_ANSI_Slash: CGKeyCode = 44;
pub const kVK_ANSI_N: CGKeyCode = 45;
pub const kVK_ANSI_M: CGKeyCode = 46;
pub const kVK_ANSI_Period: CGKeyCode = 47;
pub const kVK_Tab: CGKeyCode = 48;
pub const kVK_Space: CGKeyCode = 49;
pub const kVK_ANSI_Grave: CGKeyCode = 50;
pub const kVK_Delete: CGKeyCode = 51;
pub const kVK_Escape: CGKeyCode = 53;
pub const kVK_RightCommand: CGKeyCode = 54;
pub const kVK_Command: CGKeyCode = 55;
pub const kVK_Shift: CGKeyCode = 56;
pub const kVK_CapsLock: CGKeyCode = 57;
pub const kVK_Option: CGKeyCode = 58;
pub const kVK_Control: CGKeyCode = 59;
pub const kVK_RightShift: CGKeyCode = 60;
pub const kVK_RightOption: CGKeyCode = 61;
pub const kVK_RightControl: CGKeyCode = 62;
pub const kVK_Function: CGKeyCode = 63;
pub const kVK_F17: CGKeyCode = 64;
pub const kVK_ANSI_KeypadDecimal: CGKeyCode = 65;
pub const kVK_ANSI_KeypadMultiply: CGKeyCode = 67;
pub const kVK_ANSI_KeypadPlus: CGKeyCode = 69;
pub const kVK_ANSI_KeypadClear: CGKeyCode = 71;
pub const kVK_VolumeUp: CGKeyCode = 72;
pub const kVK_VolumeDown: CGKeyCode = 73;
pub const kVK_Mute: CGKeyCode = 74;
pub const kVK_ANSI_KeypadDivide: CGKeyCode = 75;
pub const kVK_ANSI_KeypadEnter: CGKeyCode = 76;
pub const kVK_ANSI_KeypadMinus: CGKeyCode = 78;
pub const kVK_F18: CGKeyCode = 79;
pub const kVK_F19: CGKeyCode = 80;
pub const kVK_ANSI_KeypadEquals: CGKeyCode = 81;
pub const kVK_ANSI_Keypad0: CGKeyCode = 82;
pub const kVK_ANSI_Keypad1: CGKeyCode = 83;
pub const kVK_ANSI_Keypad2: CGKeyCode = 84;
pub const kVK_ANSI_Keypad3: CGKeyCode = 85;
pub const kVK_ANSI_Keypad4: CGKeyCode = 86;
pub const kVK_ANSI_Keypad5: CGKeyCode = 87;
pub const kVK_ANSI_Keypad6: CGKeyCode = 88;
pub const kVK_ANSI_Keypad7: CGKeyCode = 89;
pub const kVK_F20: CGKeyCode = 90;
pub const kVK_ANSI_Keypad8: CGKeyCode = 91;
pub const kVK_ANSI_Keypad9: CGKeyCode = 92;
pub const kVK_JIS_Yen: CGKeyCode = 93;
pub const kVK_JIS_Underscore: CGKeyCode = 94;
pub const kVK_JIS_KeypadComma: CGKeyCode = 95;
pub const kVK_F5: CGKeyCode = 96;
pub const kVK_F6: CGKeyCode = 97;
pub const kVK_F7: CGKeyCode = 98;
pub const kVK_F3: CGKeyCode = 99;
pub const kVK_F8: CGKeyCode = 100;
pub const kVK_F9: CGKeyCode = 101;
pub const kVK_JIS_Eisu: CGKeyCode = 102;
pub const kVK_F11: CGKeyCode = 103;
pub const kVK_JIS_Kana: CGKeyCode = 104;
pub const kVK_F13: CGKeyCode = 105;
pub const kVK_F16: CGKeyCode = 106;
pub const kVK_F14: CGKeyCode = 107;
pub const kVK_F10: CGKeyCode = 109;
pub const kVK_Context_Menu: CGKeyCode = 110;
pub const kVK_F12: CGKeyCode = 111;
pub const kVK_F15: CGKeyCode = 113;
pub const kVK_Help: CGKeyCode = 114;
pub const kVK_Home: CGKeyCode = 115;
pub const kVK_PageUp: CGKeyCode = 116;
pub const kVK_ForwardDelete: CGKeyCode = 117;
pub const kVK_F4: CGKeyCode = 118;
pub const kVK_End: CGKeyCode = 119;
pub const kVK_F2: CGKeyCode = 120;
pub const kVK_PageDown: CGKeyCode = 121;
pub const kVK_F1: CGKeyCode = 122;
pub const kVK_LeftArrow: CGKeyCode = 123;
pub const kVK_RightArrow: CGKeyCode = 124;
pub const kVK_DownArrow: CGKeyCode = 125;
pub const kVK_UpArrow: CGKeyCode = 126;

/// Convert macOS keycode to Key
pub fn key_from_code(code: CGKeyCode) -> Key {
    match code {
        kVK_ANSI_A => Key::KeyA,
        kVK_ANSI_S => Key::KeyS,
        kVK_ANSI_D => Key::KeyD,
        kVK_ANSI_F => Key::KeyF,
        kVK_ANSI_H => Key::KeyH,
        kVK_ANSI_G => Key::KeyG,
        kVK_ANSI_Z => Key::KeyZ,
        kVK_ANSI_X => Key::KeyX,
        kVK_ANSI_C => Key::KeyC,
        kVK_ANSI_V => Key::KeyV,
        kVK_ISO_Section => Key::IntlBackslash,
        kVK_ANSI_B => Key::KeyB,
        kVK_ANSI_Q => Key::KeyQ,
        kVK_ANSI_W => Key::KeyW,
        kVK_ANSI_E => Key::KeyE,
        kVK_ANSI_R => Key::KeyR,
        kVK_ANSI_Y => Key::KeyY,
        kVK_ANSI_T => Key::KeyT,
        kVK_ANSI_1 => Key::Num1,
        kVK_ANSI_2 => Key::Num2,
        kVK_ANSI_3 => Key::Num3,
        kVK_ANSI_4 => Key::Num4,
        kVK_ANSI_6 => Key::Num6,
        kVK_ANSI_5 => Key::Num5,
        kVK_ANSI_Equal => Key::Equal,
        kVK_ANSI_9 => Key::Num9,
        kVK_ANSI_7 => Key::Num7,
        kVK_ANSI_Minus => Key::Minus,
        kVK_ANSI_8 => Key::Num8,
        kVK_ANSI_0 => Key::Num0,
        kVK_ANSI_RightBracket => Key::RightBracket,
        kVK_ANSI_O => Key::KeyO,
        kVK_ANSI_U => Key::KeyU,
        kVK_ANSI_LeftBracket => Key::LeftBracket,
        kVK_ANSI_I => Key::KeyI,
        kVK_ANSI_P => Key::KeyP,
        kVK_Return => Key::Return,
        kVK_ANSI_L => Key::KeyL,
        kVK_ANSI_J => Key::KeyJ,
        kVK_ANSI_Quote => Key::Quote,
        kVK_ANSI_K => Key::KeyK,
        kVK_ANSI_Semicolon => Key::SemiColon,
        kVK_ANSI_Backslash => Key::BackSlash,
        kVK_ANSI_Comma => Key::Comma,
        kVK_ANSI_Slash => Key::Slash,
        kVK_ANSI_N => Key::KeyN,
        kVK_ANSI_M => Key::KeyM,
        kVK_ANSI_Period => Key::Dot,
        kVK_Tab => Key::Tab,
        kVK_Space => Key::Space,
        kVK_ANSI_Grave => Key::BackQuote,
        kVK_Delete => Key::Backspace,
        kVK_Escape => Key::Escape,
        kVK_RightCommand => Key::MetaRight,
        kVK_Command => Key::MetaLeft,
        kVK_Shift => Key::ShiftLeft,
        kVK_CapsLock => Key::CapsLock,
        kVK_Option => Key::Alt,
        kVK_Control => Key::ControlLeft,
        kVK_RightShift => Key::ShiftRight,
        kVK_RightOption => Key::AltGr,
        kVK_RightControl => Key::ControlRight,
        kVK_Function => Key::Function,
        kVK_F17 => Key::F17,
        kVK_ANSI_KeypadDecimal => Key::KpDecimal,
        kVK_ANSI_KeypadMultiply => Key::KpMultiply,
        kVK_ANSI_KeypadPlus => Key::KpPlus,
        kVK_ANSI_KeypadClear => Key::NumLock,
        kVK_VolumeUp => Key::VolumeUp,
        kVK_VolumeDown => Key::VolumeDown,
        kVK_Mute => Key::VolumeMute,
        kVK_ANSI_KeypadDivide => Key::KpDivide,
        kVK_ANSI_KeypadEnter => Key::KpReturn,
        kVK_ANSI_KeypadMinus => Key::KpMinus,
        kVK_F18 => Key::F18,
        kVK_F19 => Key::F19,
        kVK_ANSI_KeypadEquals => Key::KpEqual,
        kVK_ANSI_Keypad0 => Key::Kp0,
        kVK_ANSI_Keypad1 => Key::Kp1,
        kVK_ANSI_Keypad2 => Key::Kp2,
        kVK_ANSI_Keypad3 => Key::Kp3,
        kVK_ANSI_Keypad4 => Key::Kp4,
        kVK_ANSI_Keypad5 => Key::Kp5,
        kVK_ANSI_Keypad6 => Key::Kp6,
        kVK_ANSI_Keypad7 => Key::Kp7,
        kVK_F20 => Key::F20,
        kVK_ANSI_Keypad8 => Key::Kp8,
        kVK_ANSI_Keypad9 => Key::Kp9,
        kVK_JIS_Yen => Key::IntlYen,
        kVK_JIS_Underscore => Key::IntlRo,
        kVK_JIS_KeypadComma => Key::KpComma,
        kVK_F5 => Key::F5,
        kVK_F6 => Key::F6,
        kVK_F7 => Key::F7,
        kVK_F3 => Key::F3,
        kVK_F8 => Key::F8,
        kVK_F9 => Key::F9,
        kVK_JIS_Eisu => Key::Lang2,
        kVK_F11 => Key::F11,
        kVK_JIS_Kana => Key::Lang1,
        kVK_F13 => Key::F13,
        kVK_F16 => Key::F16,
        kVK_F14 => Key::F14,
        kVK_F10 => Key::F10,
        kVK_Context_Menu => Key::Apps,
        kVK_F12 => Key::F12,
        kVK_F15 => Key::F15,
        kVK_Help => Key::Insert,
        kVK_Home => Key::Home,
        kVK_PageUp => Key::PageUp,
        kVK_ForwardDelete => Key::Delete,
        kVK_F4 => Key::F4,
        kVK_End => Key::End,
        kVK_F2 => Key::F2,
        kVK_PageDown => Key::PageDown,
        kVK_F1 => Key::F1,
        kVK_LeftArrow => Key::LeftArrow,
        kVK_RightArrow => Key::RightArrow,
        kVK_DownArrow => Key::DownArrow,
        kVK_UpArrow => Key::UpArrow,
        _ => Key::Unknown(code as u32),
    }
}