@wendongfly/myhi 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/lib/xterm/LICENSE +21 -0
  3. package/dist/lib/xterm/README.md +225 -0
  4. package/dist/lib/xterm/css/xterm.css +190 -0
  5. package/dist/lib/xterm/lib/xterm.js +2 -0
  6. package/dist/lib/xterm/lib/xterm.js.map +1 -0
  7. package/dist/lib/xterm/package.json +90 -0
  8. package/dist/lib/xterm/src/browser/AccessibilityManager.ts +301 -0
  9. package/dist/lib/xterm/src/browser/Clipboard.ts +99 -0
  10. package/dist/lib/xterm/src/browser/ColorContrastCache.ts +39 -0
  11. package/dist/lib/xterm/src/browser/ColorManager.ts +268 -0
  12. package/dist/lib/xterm/src/browser/Dom.ts +10 -0
  13. package/dist/lib/xterm/src/browser/Lifecycle.ts +30 -0
  14. package/dist/lib/xterm/src/browser/Linkifier.ts +356 -0
  15. package/dist/lib/xterm/src/browser/Linkifier2.ts +397 -0
  16. package/dist/lib/xterm/src/browser/LocalizableStrings.ts +10 -0
  17. package/dist/lib/xterm/src/browser/MouseZoneManager.ts +236 -0
  18. package/dist/lib/xterm/src/browser/RenderDebouncer.ts +82 -0
  19. package/dist/lib/xterm/src/browser/ScreenDprMonitor.ts +69 -0
  20. package/dist/lib/xterm/src/browser/Terminal.ts +1447 -0
  21. package/dist/lib/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  22. package/dist/lib/xterm/src/browser/Types.d.ts +317 -0
  23. package/dist/lib/xterm/src/browser/Viewport.ts +276 -0
  24. package/dist/lib/xterm/src/browser/decorations/BufferDecorationRenderer.ts +131 -0
  25. package/dist/lib/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  26. package/dist/lib/xterm/src/browser/decorations/OverviewRulerRenderer.ts +228 -0
  27. package/dist/lib/xterm/src/browser/input/CompositionHelper.ts +237 -0
  28. package/dist/lib/xterm/src/browser/input/Mouse.ts +64 -0
  29. package/dist/lib/xterm/src/browser/input/MoveToCell.ts +249 -0
  30. package/dist/lib/xterm/src/browser/public/Terminal.ts +298 -0
  31. package/dist/lib/xterm/src/browser/renderer/BaseRenderLayer.ts +582 -0
  32. package/dist/lib/xterm/src/browser/renderer/CursorRenderLayer.ts +378 -0
  33. package/dist/lib/xterm/src/browser/renderer/CustomGlyphs.ts +632 -0
  34. package/dist/lib/xterm/src/browser/renderer/GridCache.ts +33 -0
  35. package/dist/lib/xterm/src/browser/renderer/LinkRenderLayer.ts +84 -0
  36. package/dist/lib/xterm/src/browser/renderer/Renderer.ts +219 -0
  37. package/dist/lib/xterm/src/browser/renderer/RendererUtils.ts +26 -0
  38. package/dist/lib/xterm/src/browser/renderer/SelectionRenderLayer.ts +131 -0
  39. package/dist/lib/xterm/src/browser/renderer/TextRenderLayer.ts +344 -0
  40. package/dist/lib/xterm/src/browser/renderer/Types.d.ts +109 -0
  41. package/dist/lib/xterm/src/browser/renderer/atlas/BaseCharAtlas.ts +58 -0
  42. package/dist/lib/xterm/src/browser/renderer/atlas/CharAtlasCache.ts +95 -0
  43. package/dist/lib/xterm/src/browser/renderer/atlas/CharAtlasUtils.ts +54 -0
  44. package/dist/lib/xterm/src/browser/renderer/atlas/Constants.ts +15 -0
  45. package/dist/lib/xterm/src/browser/renderer/atlas/DynamicCharAtlas.ts +404 -0
  46. package/dist/lib/xterm/src/browser/renderer/atlas/LRUMap.ts +136 -0
  47. package/dist/lib/xterm/src/browser/renderer/atlas/Types.d.ts +29 -0
  48. package/dist/lib/xterm/src/browser/renderer/dom/DomRenderer.ts +403 -0
  49. package/dist/lib/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +344 -0
  50. package/dist/lib/xterm/src/browser/selection/SelectionModel.ts +144 -0
  51. package/dist/lib/xterm/src/browser/selection/Types.d.ts +15 -0
  52. package/dist/lib/xterm/src/browser/services/CharSizeService.ts +87 -0
  53. package/dist/lib/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  54. package/dist/lib/xterm/src/browser/services/CoreBrowserService.ts +20 -0
  55. package/dist/lib/xterm/src/browser/services/MouseService.ts +36 -0
  56. package/dist/lib/xterm/src/browser/services/RenderService.ts +237 -0
  57. package/dist/lib/xterm/src/browser/services/SelectionService.ts +1027 -0
  58. package/dist/lib/xterm/src/browser/services/Services.ts +123 -0
  59. package/dist/lib/xterm/src/browser/services/SoundService.ts +63 -0
  60. package/dist/lib/xterm/src/common/CircularList.ts +239 -0
  61. package/dist/lib/xterm/src/common/Clone.ts +23 -0
  62. package/dist/lib/xterm/src/common/Color.ts +285 -0
  63. package/dist/lib/xterm/src/common/CoreTerminal.ts +300 -0
  64. package/dist/lib/xterm/src/common/EventEmitter.ts +69 -0
  65. package/dist/lib/xterm/src/common/InputHandler.ts +3230 -0
  66. package/dist/lib/xterm/src/common/Lifecycle.ts +68 -0
  67. package/dist/lib/xterm/src/common/Platform.ts +31 -0
  68. package/dist/lib/xterm/src/common/SortedList.ts +88 -0
  69. package/dist/lib/xterm/src/common/TypedArrayUtils.ts +50 -0
  70. package/dist/lib/xterm/src/common/Types.d.ts +489 -0
  71. package/dist/lib/xterm/src/common/WindowsMode.ts +27 -0
  72. package/dist/lib/xterm/src/common/buffer/AttributeData.ts +148 -0
  73. package/dist/lib/xterm/src/common/buffer/Buffer.ts +711 -0
  74. package/dist/lib/xterm/src/common/buffer/BufferLine.ts +441 -0
  75. package/dist/lib/xterm/src/common/buffer/BufferRange.ts +13 -0
  76. package/dist/lib/xterm/src/common/buffer/BufferReflow.ts +220 -0
  77. package/dist/lib/xterm/src/common/buffer/BufferSet.ts +131 -0
  78. package/dist/lib/xterm/src/common/buffer/CellData.ts +94 -0
  79. package/dist/lib/xterm/src/common/buffer/Constants.ts +139 -0
  80. package/dist/lib/xterm/src/common/buffer/Marker.ts +37 -0
  81. package/dist/lib/xterm/src/common/buffer/Types.d.ts +64 -0
  82. package/dist/lib/xterm/src/common/data/Charsets.ts +256 -0
  83. package/dist/lib/xterm/src/common/data/EscapeSequences.ts +153 -0
  84. package/dist/lib/xterm/src/common/input/Keyboard.ts +398 -0
  85. package/dist/lib/xterm/src/common/input/TextDecoder.ts +346 -0
  86. package/dist/lib/xterm/src/common/input/UnicodeV6.ts +133 -0
  87. package/dist/lib/xterm/src/common/input/WriteBuffer.ts +229 -0
  88. package/dist/lib/xterm/src/common/input/XParseColor.ts +80 -0
  89. package/dist/lib/xterm/src/common/parser/Constants.ts +58 -0
  90. package/dist/lib/xterm/src/common/parser/DcsParser.ts +192 -0
  91. package/dist/lib/xterm/src/common/parser/EscapeSequenceParser.ts +796 -0
  92. package/dist/lib/xterm/src/common/parser/OscParser.ts +238 -0
  93. package/dist/lib/xterm/src/common/parser/Params.ts +229 -0
  94. package/dist/lib/xterm/src/common/parser/Types.d.ts +274 -0
  95. package/dist/lib/xterm/src/common/public/AddonManager.ts +56 -0
  96. package/dist/lib/xterm/src/common/public/BufferApiView.ts +35 -0
  97. package/dist/lib/xterm/src/common/public/BufferLineApiView.ts +29 -0
  98. package/dist/lib/xterm/src/common/public/BufferNamespaceApi.ts +33 -0
  99. package/dist/lib/xterm/src/common/public/ParserApi.ts +37 -0
  100. package/dist/lib/xterm/src/common/public/UnicodeApi.ts +27 -0
  101. package/dist/lib/xterm/src/common/services/BufferService.ts +185 -0
  102. package/dist/lib/xterm/src/common/services/CharsetService.ts +34 -0
  103. package/dist/lib/xterm/src/common/services/CoreMouseService.ts +309 -0
  104. package/dist/lib/xterm/src/common/services/CoreService.ts +92 -0
  105. package/dist/lib/xterm/src/common/services/DecorationService.ts +139 -0
  106. package/dist/lib/xterm/src/common/services/DirtyRowService.ts +53 -0
  107. package/dist/lib/xterm/src/common/services/InstantiationService.ts +83 -0
  108. package/dist/lib/xterm/src/common/services/LogService.ts +88 -0
  109. package/dist/lib/xterm/src/common/services/OptionsService.ts +178 -0
  110. package/dist/lib/xterm/src/common/services/ServiceRegistry.ts +49 -0
  111. package/dist/lib/xterm/src/common/services/Services.ts +323 -0
  112. package/dist/lib/xterm/src/common/services/UnicodeService.ts +82 -0
  113. package/dist/lib/xterm/src/headless/Terminal.ts +170 -0
  114. package/dist/lib/xterm/src/headless/Types.d.ts +31 -0
  115. package/dist/lib/xterm/src/headless/public/Terminal.ts +216 -0
  116. package/dist/lib/xterm/typings/xterm.d.ts +1872 -0
  117. package/dist/lib/xterm-fit/LICENSE +19 -0
  118. package/dist/lib/xterm-fit/README.md +24 -0
  119. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js +2 -0
  120. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js.map +1 -0
  121. package/dist/lib/xterm-fit/out/FitAddon.js +58 -0
  122. package/dist/lib/xterm-fit/out/FitAddon.js.map +1 -0
  123. package/dist/lib/xterm-fit/out-test/FitAddon.api.js.map +1 -0
  124. package/dist/lib/xterm-fit/package.json +21 -0
  125. package/dist/lib/xterm-fit/src/FitAddon.ts +86 -0
  126. package/dist/lib/xterm-fit/typings/xterm-addon-fit.d.ts +55 -0
  127. package/dist/lib/xterm-links/LICENSE +19 -0
  128. package/dist/lib/xterm-links/README.md +21 -0
  129. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js +2 -0
  130. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js.map +1 -0
  131. package/dist/lib/xterm-links/package.json +26 -0
  132. package/dist/lib/xterm-links/src/WebLinkProvider.ts +145 -0
  133. package/dist/lib/xterm-links/src/WebLinksAddon.ts +77 -0
  134. package/dist/lib/xterm-links/typings/xterm-addon-web-links.d.ts +58 -0
  135. package/package.json +1 -1
@@ -0,0 +1,398 @@
1
+ /**
2
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4
+ * @license MIT
5
+ */
6
+
7
+ import { IKeyboardEvent, IKeyboardResult, KeyboardResultType } from 'common/Types';
8
+ import { C0 } from 'common/data/EscapeSequences';
9
+
10
+ // reg + shift key mappings for digits and special chars
11
+ const KEYCODE_KEY_MAPPINGS: { [key: number]: [string, string]} = {
12
+ // digits 0-9
13
+ 48: ['0', ')'],
14
+ 49: ['1', '!'],
15
+ 50: ['2', '@'],
16
+ 51: ['3', '#'],
17
+ 52: ['4', '$'],
18
+ 53: ['5', '%'],
19
+ 54: ['6', '^'],
20
+ 55: ['7', '&'],
21
+ 56: ['8', '*'],
22
+ 57: ['9', '('],
23
+
24
+ // special chars
25
+ 186: [';', ':'],
26
+ 187: ['=', '+'],
27
+ 188: [',', '<'],
28
+ 189: ['-', '_'],
29
+ 190: ['.', '>'],
30
+ 191: ['/', '?'],
31
+ 192: ['`', '~'],
32
+ 219: ['[', '{'],
33
+ 220: ['\\', '|'],
34
+ 221: [']', '}'],
35
+ 222: ['\'', '"']
36
+ };
37
+
38
+ export function evaluateKeyboardEvent(
39
+ ev: IKeyboardEvent,
40
+ applicationCursorMode: boolean,
41
+ isMac: boolean,
42
+ macOptionIsMeta: boolean
43
+ ): IKeyboardResult {
44
+ const result: IKeyboardResult = {
45
+ type: KeyboardResultType.SEND_KEY,
46
+ // Whether to cancel event propagation (NOTE: this may not be needed since the event is
47
+ // canceled at the end of keyDown
48
+ cancel: false,
49
+ // The new key even to emit
50
+ key: undefined
51
+ };
52
+ const modifiers = (ev.shiftKey ? 1 : 0) | (ev.altKey ? 2 : 0) | (ev.ctrlKey ? 4 : 0) | (ev.metaKey ? 8 : 0);
53
+ switch (ev.keyCode) {
54
+ case 0:
55
+ if (ev.key === 'UIKeyInputUpArrow') {
56
+ if (applicationCursorMode) {
57
+ result.key = C0.ESC + 'OA';
58
+ } else {
59
+ result.key = C0.ESC + '[A';
60
+ }
61
+ }
62
+ else if (ev.key === 'UIKeyInputLeftArrow') {
63
+ if (applicationCursorMode) {
64
+ result.key = C0.ESC + 'OD';
65
+ } else {
66
+ result.key = C0.ESC + '[D';
67
+ }
68
+ }
69
+ else if (ev.key === 'UIKeyInputRightArrow') {
70
+ if (applicationCursorMode) {
71
+ result.key = C0.ESC + 'OC';
72
+ } else {
73
+ result.key = C0.ESC + '[C';
74
+ }
75
+ }
76
+ else if (ev.key === 'UIKeyInputDownArrow') {
77
+ if (applicationCursorMode) {
78
+ result.key = C0.ESC + 'OB';
79
+ } else {
80
+ result.key = C0.ESC + '[B';
81
+ }
82
+ }
83
+ break;
84
+ case 8:
85
+ // backspace
86
+ if (ev.shiftKey) {
87
+ result.key = C0.BS; // ^H
88
+ break;
89
+ } else if (ev.altKey) {
90
+ result.key = C0.ESC + C0.DEL; // \e ^?
91
+ break;
92
+ }
93
+ result.key = C0.DEL; // ^?
94
+ break;
95
+ case 9:
96
+ // tab
97
+ if (ev.shiftKey) {
98
+ result.key = C0.ESC + '[Z';
99
+ break;
100
+ }
101
+ result.key = C0.HT;
102
+ result.cancel = true;
103
+ break;
104
+ case 13:
105
+ // return/enter
106
+ result.key = ev.altKey ? C0.ESC + C0.CR : C0.CR;
107
+ result.cancel = true;
108
+ break;
109
+ case 27:
110
+ // escape
111
+ result.key = C0.ESC;
112
+ if (ev.altKey) {
113
+ result.key = C0.ESC + C0.ESC;
114
+ }
115
+ result.cancel = true;
116
+ break;
117
+ case 37:
118
+ // left-arrow
119
+ if (ev.metaKey) {
120
+ break;
121
+ }
122
+ if (modifiers) {
123
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'D';
124
+ // HACK: Make Alt + left-arrow behave like Ctrl + left-arrow: move one word backwards
125
+ // http://unix.stackexchange.com/a/108106
126
+ // macOS uses different escape sequences than linux
127
+ if (result.key === C0.ESC + '[1;3D') {
128
+ result.key = C0.ESC + (isMac ? 'b' : '[1;5D');
129
+ }
130
+ } else if (applicationCursorMode) {
131
+ result.key = C0.ESC + 'OD';
132
+ } else {
133
+ result.key = C0.ESC + '[D';
134
+ }
135
+ break;
136
+ case 39:
137
+ // right-arrow
138
+ if (ev.metaKey) {
139
+ break;
140
+ }
141
+ if (modifiers) {
142
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'C';
143
+ // HACK: Make Alt + right-arrow behave like Ctrl + right-arrow: move one word forward
144
+ // http://unix.stackexchange.com/a/108106
145
+ // macOS uses different escape sequences than linux
146
+ if (result.key === C0.ESC + '[1;3C') {
147
+ result.key = C0.ESC + (isMac ? 'f' : '[1;5C');
148
+ }
149
+ } else if (applicationCursorMode) {
150
+ result.key = C0.ESC + 'OC';
151
+ } else {
152
+ result.key = C0.ESC + '[C';
153
+ }
154
+ break;
155
+ case 38:
156
+ // up-arrow
157
+ if (ev.metaKey) {
158
+ break;
159
+ }
160
+ if (modifiers) {
161
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'A';
162
+ // HACK: Make Alt + up-arrow behave like Ctrl + up-arrow
163
+ // http://unix.stackexchange.com/a/108106
164
+ // macOS uses different escape sequences than linux
165
+ if (!isMac && result.key === C0.ESC + '[1;3A') {
166
+ result.key = C0.ESC + '[1;5A';
167
+ }
168
+ } else if (applicationCursorMode) {
169
+ result.key = C0.ESC + 'OA';
170
+ } else {
171
+ result.key = C0.ESC + '[A';
172
+ }
173
+ break;
174
+ case 40:
175
+ // down-arrow
176
+ if (ev.metaKey) {
177
+ break;
178
+ }
179
+ if (modifiers) {
180
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'B';
181
+ // HACK: Make Alt + down-arrow behave like Ctrl + down-arrow
182
+ // http://unix.stackexchange.com/a/108106
183
+ // macOS uses different escape sequences than linux
184
+ if (!isMac && result.key === C0.ESC + '[1;3B') {
185
+ result.key = C0.ESC + '[1;5B';
186
+ }
187
+ } else if (applicationCursorMode) {
188
+ result.key = C0.ESC + 'OB';
189
+ } else {
190
+ result.key = C0.ESC + '[B';
191
+ }
192
+ break;
193
+ case 45:
194
+ // insert
195
+ if (!ev.shiftKey && !ev.ctrlKey) {
196
+ // <Ctrl> or <Shift> + <Insert> are used to
197
+ // copy-paste on some systems.
198
+ result.key = C0.ESC + '[2~';
199
+ }
200
+ break;
201
+ case 46:
202
+ // delete
203
+ if (modifiers) {
204
+ result.key = C0.ESC + '[3;' + (modifiers + 1) + '~';
205
+ } else {
206
+ result.key = C0.ESC + '[3~';
207
+ }
208
+ break;
209
+ case 36:
210
+ // home
211
+ if (modifiers) {
212
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'H';
213
+ } else if (applicationCursorMode) {
214
+ result.key = C0.ESC + 'OH';
215
+ } else {
216
+ result.key = C0.ESC + '[H';
217
+ }
218
+ break;
219
+ case 35:
220
+ // end
221
+ if (modifiers) {
222
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'F';
223
+ } else if (applicationCursorMode) {
224
+ result.key = C0.ESC + 'OF';
225
+ } else {
226
+ result.key = C0.ESC + '[F';
227
+ }
228
+ break;
229
+ case 33:
230
+ // page up
231
+ if (ev.shiftKey) {
232
+ result.type = KeyboardResultType.PAGE_UP;
233
+ } else if (ev.ctrlKey) {
234
+ result.key = C0.ESC + '[5;' + (modifiers + 1) + '~';
235
+ } else {
236
+ result.key = C0.ESC + '[5~';
237
+ }
238
+ break;
239
+ case 34:
240
+ // page down
241
+ if (ev.shiftKey) {
242
+ result.type = KeyboardResultType.PAGE_DOWN;
243
+ } else if (ev.ctrlKey) {
244
+ result.key = C0.ESC + '[6;' + (modifiers + 1) + '~';
245
+ } else {
246
+ result.key = C0.ESC + '[6~';
247
+ }
248
+ break;
249
+ case 112:
250
+ // F1-F12
251
+ if (modifiers) {
252
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'P';
253
+ } else {
254
+ result.key = C0.ESC + 'OP';
255
+ }
256
+ break;
257
+ case 113:
258
+ if (modifiers) {
259
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'Q';
260
+ } else {
261
+ result.key = C0.ESC + 'OQ';
262
+ }
263
+ break;
264
+ case 114:
265
+ if (modifiers) {
266
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'R';
267
+ } else {
268
+ result.key = C0.ESC + 'OR';
269
+ }
270
+ break;
271
+ case 115:
272
+ if (modifiers) {
273
+ result.key = C0.ESC + '[1;' + (modifiers + 1) + 'S';
274
+ } else {
275
+ result.key = C0.ESC + 'OS';
276
+ }
277
+ break;
278
+ case 116:
279
+ if (modifiers) {
280
+ result.key = C0.ESC + '[15;' + (modifiers + 1) + '~';
281
+ } else {
282
+ result.key = C0.ESC + '[15~';
283
+ }
284
+ break;
285
+ case 117:
286
+ if (modifiers) {
287
+ result.key = C0.ESC + '[17;' + (modifiers + 1) + '~';
288
+ } else {
289
+ result.key = C0.ESC + '[17~';
290
+ }
291
+ break;
292
+ case 118:
293
+ if (modifiers) {
294
+ result.key = C0.ESC + '[18;' + (modifiers + 1) + '~';
295
+ } else {
296
+ result.key = C0.ESC + '[18~';
297
+ }
298
+ break;
299
+ case 119:
300
+ if (modifiers) {
301
+ result.key = C0.ESC + '[19;' + (modifiers + 1) + '~';
302
+ } else {
303
+ result.key = C0.ESC + '[19~';
304
+ }
305
+ break;
306
+ case 120:
307
+ if (modifiers) {
308
+ result.key = C0.ESC + '[20;' + (modifiers + 1) + '~';
309
+ } else {
310
+ result.key = C0.ESC + '[20~';
311
+ }
312
+ break;
313
+ case 121:
314
+ if (modifiers) {
315
+ result.key = C0.ESC + '[21;' + (modifiers + 1) + '~';
316
+ } else {
317
+ result.key = C0.ESC + '[21~';
318
+ }
319
+ break;
320
+ case 122:
321
+ if (modifiers) {
322
+ result.key = C0.ESC + '[23;' + (modifiers + 1) + '~';
323
+ } else {
324
+ result.key = C0.ESC + '[23~';
325
+ }
326
+ break;
327
+ case 123:
328
+ if (modifiers) {
329
+ result.key = C0.ESC + '[24;' + (modifiers + 1) + '~';
330
+ } else {
331
+ result.key = C0.ESC + '[24~';
332
+ }
333
+ break;
334
+ default:
335
+ // a-z and space
336
+ if (ev.ctrlKey && !ev.shiftKey && !ev.altKey && !ev.metaKey) {
337
+ if (ev.keyCode >= 65 && ev.keyCode <= 90) {
338
+ result.key = String.fromCharCode(ev.keyCode - 64);
339
+ } else if (ev.keyCode === 32) {
340
+ result.key = C0.NUL;
341
+ } else if (ev.keyCode >= 51 && ev.keyCode <= 55) {
342
+ // escape, file sep, group sep, record sep, unit sep
343
+ result.key = String.fromCharCode(ev.keyCode - 51 + 27);
344
+ } else if (ev.keyCode === 56) {
345
+ result.key = C0.DEL;
346
+ } else if (ev.keyCode === 219) {
347
+ result.key = C0.ESC;
348
+ } else if (ev.keyCode === 220) {
349
+ result.key = C0.FS;
350
+ } else if (ev.keyCode === 221) {
351
+ result.key = C0.GS;
352
+ }
353
+ } else if ((!isMac || macOptionIsMeta) && ev.altKey && !ev.metaKey) {
354
+ // On macOS this is a third level shift when !macOptionIsMeta. Use <Esc> instead.
355
+ const keyMapping = KEYCODE_KEY_MAPPINGS[ev.keyCode];
356
+ const key = keyMapping?.[!ev.shiftKey ? 0 : 1];
357
+ if (key) {
358
+ result.key = C0.ESC + key;
359
+ } else if (ev.keyCode >= 65 && ev.keyCode <= 90) {
360
+ const keyCode = ev.ctrlKey ? ev.keyCode - 64 : ev.keyCode + 32;
361
+ let keyString = String.fromCharCode(keyCode);
362
+ if (ev.shiftKey) {
363
+ keyString = keyString.toUpperCase();
364
+ }
365
+ result.key = C0.ESC + keyString;
366
+ } else if (ev.key === 'Dead' && ev.code.startsWith('Key')) {
367
+ // Reference: https://github.com/xtermjs/xterm.js/issues/3725
368
+ // Alt will produce a "dead key" (initate composition) with some
369
+ // of the letters in US layout (e.g. N/E/U).
370
+ // It's safe to match against Key* since no other `code` values begin with "Key".
371
+ // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code/code_values#code_values_on_mac
372
+ let keyString = ev.code.slice(3, 4);
373
+ if (!ev.shiftKey) {
374
+ keyString = keyString.toLowerCase();
375
+ }
376
+ result.key = C0.ESC + keyString;
377
+ result.cancel = true;
378
+ }
379
+ } else if (isMac && !ev.altKey && !ev.ctrlKey && !ev.shiftKey && ev.metaKey) {
380
+ if (ev.keyCode === 65) { // cmd + a
381
+ result.type = KeyboardResultType.SELECT_ALL;
382
+ }
383
+ } else if (ev.key && !ev.ctrlKey && !ev.altKey && !ev.metaKey && ev.keyCode >= 48 && ev.key.length === 1) {
384
+ // Include only keys that that result in a _single_ character; don't include num lock, volume up, etc.
385
+ result.key = ev.key;
386
+ } else if (ev.key && ev.ctrlKey) {
387
+ if (ev.key === '_') { // ^_
388
+ result.key = C0.US;
389
+ }
390
+ if (ev.key === '@') { // ^ + shift + 2 = ^ + @
391
+ result.key = C0.NUL;
392
+ }
393
+ }
394
+ break;
395
+ }
396
+
397
+ return result;
398
+ }