CarbonKeys.h
1 #ifndef _CARBONKEYS_H 2 #define _CARBONKEYS_H 3 4 #include <stdint.h> 5 #include <HIToolbox/Events.h> 6 7 // The contents of this file are hardware specific to a certain degree, 8 // but this is probably as good as we can do. 9 // The only hardware-independ codes we can get from X11 are keysyms, 10 // but those are _after_ the keyboard layout is applied, so definitely 11 // not something we could easily map to Carbon constants. 12 13 // Missing: 14 // kVK_ANSI_KeypadEquals 15 // kVK_Function 16 // kVK_F16 17 // kVK_F17 18 // kVK_F18 19 // kVK_F19 20 // kVK_F20 21 // kVK_Help 22 23 static const uint8_t x11ToCarbon[256] = { 24 [38] = kVK_ANSI_A, 25 [39] = kVK_ANSI_S, 26 [40] = kVK_ANSI_D, 27 [41] = kVK_ANSI_F, 28 [43] = kVK_ANSI_H, 29 [42] = kVK_ANSI_G, 30 [52] = kVK_ANSI_Z, 31 [53] = kVK_ANSI_X, 32 [54] = kVK_ANSI_C, 33 [55] = kVK_ANSI_V, 34 [56] = kVK_ANSI_B, 35 [24] = kVK_ANSI_Q, 36 [25] = kVK_ANSI_W, 37 [26] = kVK_ANSI_E, 38 [27] = kVK_ANSI_R, 39 [29] = kVK_ANSI_Y, 40 [28] = kVK_ANSI_T, 41 [10] = kVK_ANSI_1, 42 [11] = kVK_ANSI_2, 43 [12] = kVK_ANSI_3, 44 [13] = kVK_ANSI_4, 45 [15] = kVK_ANSI_6, 46 [14] = kVK_ANSI_5, 47 [21] = kVK_ANSI_Equal, 48 [18] = kVK_ANSI_9, 49 [16] = kVK_ANSI_7, 50 [20] = kVK_ANSI_Minus, 51 [17] = kVK_ANSI_8, 52 [19] = kVK_ANSI_0, 53 [35] = kVK_ANSI_RightBracket, 54 [32] = kVK_ANSI_O, 55 [30] = kVK_ANSI_U, 56 [34] = kVK_ANSI_LeftBracket, 57 [31] = kVK_ANSI_I, 58 [33] = kVK_ANSI_P, 59 [46] = kVK_ANSI_L, 60 [44] = kVK_ANSI_J, 61 [48] = kVK_ANSI_Quote, 62 [45] = kVK_ANSI_K, 63 [47] = kVK_ANSI_Semicolon, 64 [51] = kVK_ANSI_Backslash, 65 [59] = kVK_ANSI_Comma, 66 [61] = kVK_ANSI_Slash, 67 [57] = kVK_ANSI_N, 68 [58] = kVK_ANSI_M, 69 [60] = kVK_ANSI_Period, 70 [49] = kVK_ANSI_Grave, 71 [91] = kVK_ANSI_KeypadDecimal, 72 [63] = kVK_ANSI_KeypadMultiply, 73 [86] = kVK_ANSI_KeypadPlus, 74 [77] = kVK_ANSI_KeypadClear, 75 [106] = kVK_ANSI_KeypadDivide, 76 [104] = kVK_ANSI_KeypadEnter, 77 [82] = kVK_ANSI_KeypadMinus, 78 [90] = kVK_ANSI_Keypad0, 79 [87] = kVK_ANSI_Keypad1, 80 [88] = kVK_ANSI_Keypad2, 81 [89] = kVK_ANSI_Keypad3, 82 [83] = kVK_ANSI_Keypad4, 83 [84] = kVK_ANSI_Keypad5, 84 [85] = kVK_ANSI_Keypad6, 85 [79] = kVK_ANSI_Keypad7, 86 [80] = kVK_ANSI_Keypad8, 87 [81] = kVK_ANSI_Keypad9, 88 [36] = kVK_Return, 89 [23] = kVK_Tab, 90 [65] = kVK_Space, 91 [22] = kVK_Delete, 92 [9] = kVK_Escape, 93 [64] = kVK_Command, 94 [50] = kVK_Shift, 95 [66] = kVK_CapsLock, 96 [133] = kVK_Option, 97 [37] = kVK_Control, 98 [62] = kVK_RightShift, 99 [134] = kVK_RightOption, 100 [105] = kVK_RightControl, 101 [123] = kVK_VolumeUp, 102 [122] = kVK_VolumeDown, 103 [121] = kVK_Mute, 104 [71] = kVK_F5, 105 [72] = kVK_F6, 106 [73] = kVK_F7, 107 [69] = kVK_F3, 108 [74] = kVK_F8, 109 [75] = kVK_F9, 110 [95] = kVK_F11, 111 [107] = kVK_F13, 112 [78] = kVK_F14, 113 [76] = kVK_F10, 114 [96] = kVK_F12, 115 [127] = kVK_F15, 116 [110] = kVK_Home, 117 [112] = kVK_PageUp, 118 [119] = kVK_ForwardDelete, 119 [70] = kVK_F4, 120 [115] = kVK_End, 121 [68] = kVK_F2, 122 [117] = kVK_PageDown, 123 [67] = kVK_F1, 124 [113] = kVK_LeftArrow, 125 [114] = kVK_RightArrow, 126 [116] = kVK_DownArrow, 127 [111] = kVK_UpArrow, 128 }; 129 130 static const uint8_t carbonToX11[256] = { 131 [kVK_ANSI_A] = 38, 132 [kVK_ANSI_S] = 39, 133 [kVK_ANSI_D] = 40, 134 [kVK_ANSI_F] = 41, 135 [kVK_ANSI_H] = 43, 136 [kVK_ANSI_G] = 42, 137 [kVK_ANSI_Z] = 52, 138 [kVK_ANSI_X] = 53, 139 [kVK_ANSI_C] = 54, 140 [kVK_ANSI_V] = 55, 141 [kVK_ANSI_B] = 56, 142 [kVK_ANSI_Q] = 24, 143 [kVK_ANSI_W] = 25, 144 [kVK_ANSI_E] = 26, 145 [kVK_ANSI_R] = 27, 146 [kVK_ANSI_Y] = 29, 147 [kVK_ANSI_T] = 28, 148 [kVK_ANSI_1] = 10, 149 [kVK_ANSI_2] = 11, 150 [kVK_ANSI_3] = 12, 151 [kVK_ANSI_4] = 13, 152 [kVK_ANSI_6] = 15, 153 [kVK_ANSI_5] = 14, 154 [kVK_ANSI_Equal] = 21, 155 [kVK_ANSI_9] = 18, 156 [kVK_ANSI_7] = 16, 157 [kVK_ANSI_Minus] = 20, 158 [kVK_ANSI_8] = 17, 159 [kVK_ANSI_0] = 19, 160 [kVK_ANSI_RightBracket] = 35, 161 [kVK_ANSI_O] = 32, 162 [kVK_ANSI_U] = 30, 163 [kVK_ANSI_LeftBracket] = 34, 164 [kVK_ANSI_I] = 31, 165 [kVK_ANSI_P] = 33, 166 [kVK_ANSI_L] = 46, 167 [kVK_ANSI_J] = 44, 168 [kVK_ANSI_Quote] = 48, 169 [kVK_ANSI_K] = 45, 170 [kVK_ANSI_Semicolon] = 47, 171 [kVK_ANSI_Backslash] = 51, 172 [kVK_ANSI_Comma] = 59, 173 [kVK_ANSI_Slash] = 61, 174 [kVK_ANSI_N] = 57, 175 [kVK_ANSI_M] = 58, 176 [kVK_ANSI_Period] = 60, 177 [kVK_ANSI_Grave] = 49, 178 [kVK_ANSI_KeypadDecimal] = 91, 179 [kVK_ANSI_KeypadMultiply] = 63, 180 [kVK_ANSI_KeypadPlus] = 86, 181 [kVK_ANSI_KeypadClear] = 77, 182 [kVK_ANSI_KeypadDivide] = 106, 183 [kVK_ANSI_KeypadEnter] = 104, 184 [kVK_ANSI_KeypadMinus] = 82, 185 [kVK_ANSI_Keypad0] = 90, 186 [kVK_ANSI_Keypad1] = 87, 187 [kVK_ANSI_Keypad2] = 88, 188 [kVK_ANSI_Keypad3] = 89, 189 [kVK_ANSI_Keypad4] = 83, 190 [kVK_ANSI_Keypad5] = 84, 191 [kVK_ANSI_Keypad6] = 85, 192 [kVK_ANSI_Keypad7] = 79, 193 [kVK_ANSI_Keypad8] = 80, 194 [kVK_ANSI_Keypad9] = 81, 195 [kVK_Return] = 36, 196 [kVK_Tab] = 23, 197 [kVK_Space] = 65, 198 [kVK_Delete] = 22, 199 [kVK_Escape] = 9, 200 [kVK_Command] = 64, 201 [kVK_Shift] = 50, 202 [kVK_CapsLock] = 66, 203 [kVK_Option] = 133, 204 [kVK_Control] = 37, 205 [kVK_RightShift] = 62, 206 [kVK_RightOption] = 134, 207 [kVK_RightControl] = 105, 208 [kVK_VolumeUp] = 123, 209 [kVK_VolumeDown] = 122, 210 [kVK_Mute] = 121, 211 [kVK_F5] = 71, 212 [kVK_F6] = 72, 213 [kVK_F7] = 73, 214 [kVK_F3] = 69, 215 [kVK_F8] = 74, 216 [kVK_F9] = 75, 217 [kVK_F11] = 95, 218 [kVK_F13] = 107, 219 [kVK_F14] = 78, 220 [kVK_F10] = 76, 221 [kVK_F12] = 96, 222 [kVK_F15] = 127, 223 [kVK_Home] = 110, 224 [kVK_PageUp] = 112, 225 [kVK_ForwardDelete] = 119, 226 [kVK_F4] = 70, 227 [kVK_End] = 115, 228 [kVK_F2] = 68, 229 [kVK_PageDown] = 117, 230 [kVK_F1] = 67, 231 [kVK_LeftArrow] = 113, 232 [kVK_RightArrow] = 114, 233 [kVK_DownArrow] = 116, 234 [kVK_UpArrow] = 111, 235 }; 236 237 238 #endif