input_map.dart 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. import 'package:flutter/services.dart';
  2. import 'package:xterm/src/core/input/keys.dart';
  3. final _keyToTerminalKey = {
  4. LogicalKeyboardKey.hyper: TerminalKey.hyper,
  5. LogicalKeyboardKey.superKey: TerminalKey.superKey,
  6. LogicalKeyboardKey.fnLock: TerminalKey.fnLock,
  7. LogicalKeyboardKey.suspend: TerminalKey.suspend,
  8. LogicalKeyboardKey.resume: TerminalKey.resume,
  9. LogicalKeyboardKey.sleep: TerminalKey.sleep,
  10. LogicalKeyboardKey.wakeUp: TerminalKey.wakeUp,
  11. LogicalKeyboardKey.keyA: TerminalKey.keyA,
  12. LogicalKeyboardKey.keyB: TerminalKey.keyB,
  13. LogicalKeyboardKey.keyC: TerminalKey.keyC,
  14. LogicalKeyboardKey.keyD: TerminalKey.keyD,
  15. LogicalKeyboardKey.keyE: TerminalKey.keyE,
  16. LogicalKeyboardKey.keyF: TerminalKey.keyF,
  17. LogicalKeyboardKey.keyG: TerminalKey.keyG,
  18. LogicalKeyboardKey.keyH: TerminalKey.keyH,
  19. LogicalKeyboardKey.keyI: TerminalKey.keyI,
  20. LogicalKeyboardKey.keyJ: TerminalKey.keyJ,
  21. LogicalKeyboardKey.keyK: TerminalKey.keyK,
  22. LogicalKeyboardKey.keyL: TerminalKey.keyL,
  23. LogicalKeyboardKey.keyM: TerminalKey.keyM,
  24. LogicalKeyboardKey.keyN: TerminalKey.keyN,
  25. LogicalKeyboardKey.keyO: TerminalKey.keyO,
  26. LogicalKeyboardKey.keyP: TerminalKey.keyP,
  27. LogicalKeyboardKey.keyQ: TerminalKey.keyQ,
  28. LogicalKeyboardKey.keyR: TerminalKey.keyR,
  29. LogicalKeyboardKey.keyS: TerminalKey.keyS,
  30. LogicalKeyboardKey.keyT: TerminalKey.keyT,
  31. LogicalKeyboardKey.keyU: TerminalKey.keyU,
  32. LogicalKeyboardKey.keyV: TerminalKey.keyV,
  33. LogicalKeyboardKey.keyW: TerminalKey.keyW,
  34. LogicalKeyboardKey.keyX: TerminalKey.keyX,
  35. LogicalKeyboardKey.keyY: TerminalKey.keyY,
  36. LogicalKeyboardKey.keyZ: TerminalKey.keyZ,
  37. LogicalKeyboardKey.digit1: TerminalKey.digit1,
  38. LogicalKeyboardKey.digit2: TerminalKey.digit2,
  39. LogicalKeyboardKey.digit3: TerminalKey.digit3,
  40. LogicalKeyboardKey.digit4: TerminalKey.digit4,
  41. LogicalKeyboardKey.digit5: TerminalKey.digit5,
  42. LogicalKeyboardKey.digit6: TerminalKey.digit6,
  43. LogicalKeyboardKey.digit7: TerminalKey.digit7,
  44. LogicalKeyboardKey.digit8: TerminalKey.digit8,
  45. LogicalKeyboardKey.digit9: TerminalKey.digit9,
  46. LogicalKeyboardKey.digit0: TerminalKey.digit0,
  47. LogicalKeyboardKey.enter: TerminalKey.enter,
  48. LogicalKeyboardKey.escape: TerminalKey.escape,
  49. LogicalKeyboardKey.backspace: TerminalKey.backspace,
  50. LogicalKeyboardKey.tab: TerminalKey.tab,
  51. LogicalKeyboardKey.space: TerminalKey.space,
  52. LogicalKeyboardKey.minus: TerminalKey.minus,
  53. LogicalKeyboardKey.equal: TerminalKey.equal,
  54. LogicalKeyboardKey.bracketLeft: TerminalKey.bracketLeft,
  55. LogicalKeyboardKey.bracketRight: TerminalKey.bracketRight,
  56. LogicalKeyboardKey.backslash: TerminalKey.backslash,
  57. LogicalKeyboardKey.semicolon: TerminalKey.semicolon,
  58. LogicalKeyboardKey.quote: TerminalKey.quote,
  59. LogicalKeyboardKey.backquote: TerminalKey.backquote,
  60. LogicalKeyboardKey.comma: TerminalKey.comma,
  61. LogicalKeyboardKey.period: TerminalKey.period,
  62. LogicalKeyboardKey.slash: TerminalKey.slash,
  63. LogicalKeyboardKey.capsLock: TerminalKey.capsLock,
  64. LogicalKeyboardKey.f1: TerminalKey.f1,
  65. LogicalKeyboardKey.f2: TerminalKey.f2,
  66. LogicalKeyboardKey.f3: TerminalKey.f3,
  67. LogicalKeyboardKey.f4: TerminalKey.f4,
  68. LogicalKeyboardKey.f5: TerminalKey.f5,
  69. LogicalKeyboardKey.f6: TerminalKey.f6,
  70. LogicalKeyboardKey.f7: TerminalKey.f7,
  71. LogicalKeyboardKey.f8: TerminalKey.f8,
  72. LogicalKeyboardKey.f9: TerminalKey.f9,
  73. LogicalKeyboardKey.f10: TerminalKey.f10,
  74. LogicalKeyboardKey.f11: TerminalKey.f11,
  75. LogicalKeyboardKey.f12: TerminalKey.f12,
  76. LogicalKeyboardKey.printScreen: TerminalKey.printScreen,
  77. LogicalKeyboardKey.scrollLock: TerminalKey.scrollLock,
  78. LogicalKeyboardKey.pause: TerminalKey.pause,
  79. LogicalKeyboardKey.insert: TerminalKey.insert,
  80. LogicalKeyboardKey.home: TerminalKey.home,
  81. LogicalKeyboardKey.pageUp: TerminalKey.pageUp,
  82. LogicalKeyboardKey.delete: TerminalKey.delete,
  83. LogicalKeyboardKey.end: TerminalKey.end,
  84. LogicalKeyboardKey.pageDown: TerminalKey.pageDown,
  85. LogicalKeyboardKey.arrowRight: TerminalKey.arrowRight,
  86. LogicalKeyboardKey.arrowLeft: TerminalKey.arrowLeft,
  87. LogicalKeyboardKey.arrowDown: TerminalKey.arrowDown,
  88. LogicalKeyboardKey.arrowUp: TerminalKey.arrowUp,
  89. LogicalKeyboardKey.numLock: TerminalKey.numLock,
  90. LogicalKeyboardKey.numpadDivide: TerminalKey.numpadDivide,
  91. LogicalKeyboardKey.numpadMultiply: TerminalKey.numpadMultiply,
  92. LogicalKeyboardKey.numpadSubtract: TerminalKey.numpadSubtract,
  93. LogicalKeyboardKey.numpadAdd: TerminalKey.numpadAdd,
  94. LogicalKeyboardKey.numpadEnter: TerminalKey.numpadEnter,
  95. LogicalKeyboardKey.numpad1: TerminalKey.numpad1,
  96. LogicalKeyboardKey.numpad2: TerminalKey.numpad2,
  97. LogicalKeyboardKey.numpad3: TerminalKey.numpad3,
  98. LogicalKeyboardKey.numpad4: TerminalKey.numpad4,
  99. LogicalKeyboardKey.numpad5: TerminalKey.numpad5,
  100. LogicalKeyboardKey.numpad6: TerminalKey.numpad6,
  101. LogicalKeyboardKey.numpad7: TerminalKey.numpad7,
  102. LogicalKeyboardKey.numpad8: TerminalKey.numpad8,
  103. LogicalKeyboardKey.numpad9: TerminalKey.numpad9,
  104. LogicalKeyboardKey.numpad0: TerminalKey.numpad0,
  105. LogicalKeyboardKey.numpadDecimal: TerminalKey.numpadDecimal,
  106. LogicalKeyboardKey.intlBackslash: TerminalKey.intlBackslash,
  107. LogicalKeyboardKey.contextMenu: TerminalKey.contextMenu,
  108. LogicalKeyboardKey.power: TerminalKey.power,
  109. LogicalKeyboardKey.numpadEqual: TerminalKey.numpadEqual,
  110. LogicalKeyboardKey.f13: TerminalKey.f13,
  111. LogicalKeyboardKey.f14: TerminalKey.f14,
  112. LogicalKeyboardKey.f15: TerminalKey.f15,
  113. LogicalKeyboardKey.f16: TerminalKey.f16,
  114. LogicalKeyboardKey.f17: TerminalKey.f17,
  115. LogicalKeyboardKey.f18: TerminalKey.f18,
  116. LogicalKeyboardKey.f19: TerminalKey.f19,
  117. LogicalKeyboardKey.f20: TerminalKey.f20,
  118. LogicalKeyboardKey.f21: TerminalKey.f21,
  119. LogicalKeyboardKey.f22: TerminalKey.f22,
  120. LogicalKeyboardKey.f23: TerminalKey.f23,
  121. LogicalKeyboardKey.f24: TerminalKey.f24,
  122. LogicalKeyboardKey.open: TerminalKey.open,
  123. LogicalKeyboardKey.help: TerminalKey.help,
  124. LogicalKeyboardKey.select: TerminalKey.select,
  125. LogicalKeyboardKey.again: TerminalKey.again,
  126. LogicalKeyboardKey.undo: TerminalKey.undo,
  127. LogicalKeyboardKey.cut: TerminalKey.cut,
  128. LogicalKeyboardKey.copy: TerminalKey.copy,
  129. LogicalKeyboardKey.paste: TerminalKey.paste,
  130. LogicalKeyboardKey.find: TerminalKey.find,
  131. LogicalKeyboardKey.audioVolumeMute: TerminalKey.audioVolumeMute,
  132. LogicalKeyboardKey.audioVolumeUp: TerminalKey.audioVolumeUp,
  133. LogicalKeyboardKey.audioVolumeDown: TerminalKey.audioVolumeDown,
  134. LogicalKeyboardKey.numpadComma: TerminalKey.numpadComma,
  135. LogicalKeyboardKey.intlRo: TerminalKey.intlRo,
  136. LogicalKeyboardKey.kanaMode: TerminalKey.kanaMode,
  137. LogicalKeyboardKey.intlYen: TerminalKey.intlYen,
  138. LogicalKeyboardKey.convert: TerminalKey.convert,
  139. LogicalKeyboardKey.nonConvert: TerminalKey.nonConvert,
  140. LogicalKeyboardKey.lang1: TerminalKey.lang1,
  141. LogicalKeyboardKey.lang2: TerminalKey.lang2,
  142. LogicalKeyboardKey.lang3: TerminalKey.lang3,
  143. LogicalKeyboardKey.lang4: TerminalKey.lang4,
  144. LogicalKeyboardKey.lang5: TerminalKey.lang5,
  145. LogicalKeyboardKey.abort: TerminalKey.abort,
  146. LogicalKeyboardKey.props: TerminalKey.props,
  147. LogicalKeyboardKey.numpadParenLeft: TerminalKey.numpadParenLeft,
  148. LogicalKeyboardKey.numpadParenRight: TerminalKey.numpadParenRight,
  149. LogicalKeyboardKey.controlLeft: TerminalKey.controlLeft,
  150. LogicalKeyboardKey.shiftLeft: TerminalKey.shiftLeft,
  151. LogicalKeyboardKey.altLeft: TerminalKey.altLeft,
  152. LogicalKeyboardKey.metaLeft: TerminalKey.metaLeft,
  153. LogicalKeyboardKey.controlRight: TerminalKey.controlRight,
  154. LogicalKeyboardKey.shiftRight: TerminalKey.shiftRight,
  155. LogicalKeyboardKey.altRight: TerminalKey.altRight,
  156. LogicalKeyboardKey.metaRight: TerminalKey.metaRight,
  157. LogicalKeyboardKey.info: TerminalKey.info,
  158. LogicalKeyboardKey.closedCaptionToggle: TerminalKey.closedCaptionToggle,
  159. LogicalKeyboardKey.brightnessUp: TerminalKey.brightnessUp,
  160. LogicalKeyboardKey.brightnessDown: TerminalKey.brightnessDown,
  161. LogicalKeyboardKey.mediaLast: TerminalKey.mediaLast,
  162. LogicalKeyboardKey.launchPhone: TerminalKey.launchPhone,
  163. LogicalKeyboardKey.exit: TerminalKey.exit,
  164. LogicalKeyboardKey.channelUp: TerminalKey.channelUp,
  165. LogicalKeyboardKey.channelDown: TerminalKey.channelDown,
  166. LogicalKeyboardKey.mediaPlay: TerminalKey.mediaPlay,
  167. LogicalKeyboardKey.mediaPause: TerminalKey.mediaPause,
  168. LogicalKeyboardKey.mediaRecord: TerminalKey.mediaRecord,
  169. LogicalKeyboardKey.mediaFastForward: TerminalKey.mediaFastForward,
  170. LogicalKeyboardKey.mediaRewind: TerminalKey.mediaRewind,
  171. LogicalKeyboardKey.mediaTrackNext: TerminalKey.mediaTrackNext,
  172. LogicalKeyboardKey.mediaTrackPrevious: TerminalKey.mediaTrackPrevious,
  173. LogicalKeyboardKey.mediaStop: TerminalKey.mediaStop,
  174. LogicalKeyboardKey.eject: TerminalKey.eject,
  175. LogicalKeyboardKey.mediaPlayPause: TerminalKey.mediaPlayPause,
  176. LogicalKeyboardKey.speechInputToggle: TerminalKey.speechInputToggle,
  177. LogicalKeyboardKey.launchWordProcessor: TerminalKey.launchWordProcessor,
  178. LogicalKeyboardKey.launchSpreadsheet: TerminalKey.launchSpreadsheet,
  179. LogicalKeyboardKey.launchMail: TerminalKey.launchMail,
  180. LogicalKeyboardKey.launchContacts: TerminalKey.launchContacts,
  181. LogicalKeyboardKey.launchCalendar: TerminalKey.launchCalendar,
  182. LogicalKeyboardKey.logOff: TerminalKey.logOff,
  183. LogicalKeyboardKey.launchControlPanel: TerminalKey.launchControlPanel,
  184. LogicalKeyboardKey.spellCheck: TerminalKey.spellCheck,
  185. LogicalKeyboardKey.launchScreenSaver: TerminalKey.launchScreenSaver,
  186. LogicalKeyboardKey.launchAssistant: TerminalKey.launchAssistant,
  187. LogicalKeyboardKey.newKey: TerminalKey.newKey,
  188. LogicalKeyboardKey.close: TerminalKey.close,
  189. LogicalKeyboardKey.save: TerminalKey.save,
  190. LogicalKeyboardKey.print: TerminalKey.print,
  191. LogicalKeyboardKey.browserSearch: TerminalKey.browserSearch,
  192. LogicalKeyboardKey.browserHome: TerminalKey.browserHome,
  193. LogicalKeyboardKey.browserBack: TerminalKey.browserBack,
  194. LogicalKeyboardKey.browserForward: TerminalKey.browserForward,
  195. LogicalKeyboardKey.browserStop: TerminalKey.browserStop,
  196. LogicalKeyboardKey.browserRefresh: TerminalKey.browserRefresh,
  197. LogicalKeyboardKey.browserFavorites: TerminalKey.browserFavorites,
  198. LogicalKeyboardKey.zoomIn: TerminalKey.zoomIn,
  199. LogicalKeyboardKey.zoomOut: TerminalKey.zoomOut,
  200. LogicalKeyboardKey.zoomToggle: TerminalKey.zoomToggle,
  201. LogicalKeyboardKey.redo: TerminalKey.redo,
  202. LogicalKeyboardKey.mailReply: TerminalKey.mailReply,
  203. LogicalKeyboardKey.mailForward: TerminalKey.mailForward,
  204. LogicalKeyboardKey.mailSend: TerminalKey.mailSend,
  205. LogicalKeyboardKey.gameButton1: TerminalKey.gameButton1,
  206. LogicalKeyboardKey.gameButton2: TerminalKey.gameButton2,
  207. LogicalKeyboardKey.gameButton3: TerminalKey.gameButton3,
  208. LogicalKeyboardKey.gameButton4: TerminalKey.gameButton4,
  209. LogicalKeyboardKey.gameButton5: TerminalKey.gameButton5,
  210. LogicalKeyboardKey.gameButton6: TerminalKey.gameButton6,
  211. LogicalKeyboardKey.gameButton7: TerminalKey.gameButton7,
  212. LogicalKeyboardKey.gameButton8: TerminalKey.gameButton8,
  213. LogicalKeyboardKey.gameButton9: TerminalKey.gameButton9,
  214. LogicalKeyboardKey.gameButton10: TerminalKey.gameButton10,
  215. LogicalKeyboardKey.gameButton11: TerminalKey.gameButton11,
  216. LogicalKeyboardKey.gameButton12: TerminalKey.gameButton12,
  217. LogicalKeyboardKey.gameButton13: TerminalKey.gameButton13,
  218. LogicalKeyboardKey.gameButton14: TerminalKey.gameButton14,
  219. LogicalKeyboardKey.gameButton15: TerminalKey.gameButton15,
  220. LogicalKeyboardKey.gameButton16: TerminalKey.gameButton16,
  221. LogicalKeyboardKey.gameButtonA: TerminalKey.gameButtonA,
  222. LogicalKeyboardKey.gameButtonB: TerminalKey.gameButtonB,
  223. LogicalKeyboardKey.gameButtonC: TerminalKey.gameButtonC,
  224. LogicalKeyboardKey.gameButtonLeft1: TerminalKey.gameButtonLeft1,
  225. LogicalKeyboardKey.gameButtonLeft2: TerminalKey.gameButtonLeft2,
  226. LogicalKeyboardKey.gameButtonMode: TerminalKey.gameButtonMode,
  227. LogicalKeyboardKey.gameButtonRight1: TerminalKey.gameButtonRight1,
  228. LogicalKeyboardKey.gameButtonRight2: TerminalKey.gameButtonRight2,
  229. LogicalKeyboardKey.gameButtonSelect: TerminalKey.gameButtonSelect,
  230. LogicalKeyboardKey.gameButtonStart: TerminalKey.gameButtonStart,
  231. LogicalKeyboardKey.gameButtonThumbLeft: TerminalKey.gameButtonThumbLeft,
  232. LogicalKeyboardKey.gameButtonThumbRight: TerminalKey.gameButtonThumbRight,
  233. LogicalKeyboardKey.gameButtonX: TerminalKey.gameButtonX,
  234. LogicalKeyboardKey.gameButtonY: TerminalKey.gameButtonY,
  235. LogicalKeyboardKey.gameButtonZ: TerminalKey.gameButtonZ,
  236. LogicalKeyboardKey.fn: TerminalKey.fn,
  237. LogicalKeyboardKey.shift: TerminalKey.shift,
  238. LogicalKeyboardKey.meta: TerminalKey.meta,
  239. LogicalKeyboardKey.alt: TerminalKey.alt,
  240. LogicalKeyboardKey.control: TerminalKey.control,
  241. };
  242. final _keyById = () {
  243. final map = <int, TerminalKey>{};
  244. for (final entry in _keyToTerminalKey.entries) {
  245. map[entry.key.keyId] = entry.value;
  246. }
  247. return map;
  248. }();
  249. final _keyByChar = () {
  250. final map = <String, TerminalKey>{};
  251. for (final entry in _keyToTerminalKey.entries) {
  252. final label = entry.key.keyLabel;
  253. if (label.isEmpty || label.length > 1) {
  254. continue;
  255. }
  256. map[label] = entry.value;
  257. map[label.toUpperCase()] = entry.value;
  258. map[label.toLowerCase()] = entry.value;
  259. }
  260. return map;
  261. }();
  262. /// Converts a [LogicalKeyboardKey] to a [TerminalKey]. Returns `null` if the
  263. /// key does not have a corresponding [TerminalKey].
  264. ///
  265. /// For example, `LogicalKeyboardKey.keyA` will be converted to
  266. /// `TerminalKey.keyA`.
  267. TerminalKey? keyToTerminalKey(LogicalKeyboardKey key) {
  268. return _keyById[key.keyId];
  269. }
  270. /// Converts a character to a [TerminalKey]. Returns `null` if the character
  271. /// does not have a corresponding [TerminalKey].
  272. ///
  273. /// For example, `charToTerminalKey('a')` or `charToTerminalKey('A')` will both
  274. /// return [TerminalKey.a].
  275. TerminalKey? charToTerminalKey(String char) {
  276. if (char.length != 1) {
  277. return null;
  278. }
  279. return _keyByChar[char];
  280. }