@@ -18,7 +18,7 @@ const fo = new FakeInput();
18
18
new Interface ( { input : fi , output : fo , terminal : true } ) ;
19
19
20
20
let keys = [ ] ;
21
- fi . on ( 'keypress' , function ( s , k ) {
21
+ fi . on ( 'keypress' , ( s , k ) => {
22
22
keys . push ( k ) ;
23
23
} ) ;
24
24
@@ -32,13 +32,13 @@ function addTest(sequences, expectedKeys) {
32
32
expectedKeys = [ expectedKeys ] ;
33
33
}
34
34
35
- expectedKeys = expectedKeys . map ( function ( k ) {
35
+ expectedKeys = expectedKeys . map ( ( k ) => {
36
36
return k ? extend ( { ctrl : false , meta : false , shift : false } , k ) : k ;
37
37
} ) ;
38
38
39
39
keys = [ ] ;
40
40
41
- sequences . forEach ( function ( sequence ) {
41
+ sequences . forEach ( ( sequence ) => {
42
42
fi . write ( sequence ) ;
43
43
} ) ;
44
44
assert . deepStrictEqual ( keys , expectedKeys ) ;
@@ -65,7 +65,7 @@ const addKeyIntervalTest = (sequences, expectedKeys, interval = 550,
65
65
expectedKeys = [ expectedKeys ] ;
66
66
}
67
67
68
- expectedKeys = expectedKeys . map ( function ( k ) {
68
+ expectedKeys = expectedKeys . map ( ( k ) => {
69
69
return k ? extend ( { ctrl : false , meta : false , shift : false } , k ) : k ;
70
70
} ) ;
71
71
@@ -129,10 +129,63 @@ addTest('a\x1baA\x1bA', [
129
129
{ name : 'a' , sequence : '\x1bA' , meta : true , shift : true } ,
130
130
] ) ;
131
131
132
- // xterm/gnome
133
- addTest ( '\x1bOA\x1bOB' , [
132
+ // xterm/gnome ESC O letter
133
+ addTest ( '\x1bOP\x1bOQ\x1bOR\x1bOS' , [
134
+ { name : 'f1' , sequence : '\x1bOP' , code : 'OP' } ,
135
+ { name : 'f2' , sequence : '\x1bOQ' , code : 'OQ' } ,
136
+ { name : 'f3' , sequence : '\x1bOR' , code : 'OR' } ,
137
+ { name : 'f4' , sequence : '\x1bOS' , code : 'OS' } ,
138
+ ] ) ;
139
+
140
+ // xterm/rxvt ESC [ number ~ */
141
+ addTest ( '\x1b[11~\x1b[12~\x1b[13~\x1b[14~' , [
142
+ { name : 'f1' , sequence : '\x1b[11~' , code : '[11~' } ,
143
+ { name : 'f2' , sequence : '\x1b[12~' , code : '[12~' } ,
144
+ { name : 'f3' , sequence : '\x1b[13~' , code : '[13~' } ,
145
+ { name : 'f4' , sequence : '\x1b[14~' , code : '[14~' } ,
146
+ ] ) ;
147
+
148
+ // from Cygwin and used in libuv
149
+ addTest ( '\x1b[[A\x1b[[B\x1b[[C\x1b[[D\x1b[[E' , [
150
+ { name : 'f1' , sequence : '\x1b[[A' , code : '[[A' } ,
151
+ { name : 'f2' , sequence : '\x1b[[B' , code : '[[B' } ,
152
+ { name : 'f3' , sequence : '\x1b[[C' , code : '[[C' } ,
153
+ { name : 'f4' , sequence : '\x1b[[D' , code : '[[D' } ,
154
+ { name : 'f5' , sequence : '\x1b[[E' , code : '[[E' } ,
155
+ ] ) ;
156
+
157
+ // common
158
+ addTest ( '\x1b[15~\x1b[17~\x1b[18~\x1b[19~\x1b[20~\x1b[21~\x1b[23~\x1b[24~' , [
159
+ { name : 'f5' , sequence : '\x1b[15~' , code : '[15~' } ,
160
+ { name : 'f6' , sequence : '\x1b[17~' , code : '[17~' } ,
161
+ { name : 'f7' , sequence : '\x1b[18~' , code : '[18~' } ,
162
+ { name : 'f8' , sequence : '\x1b[19~' , code : '[19~' } ,
163
+ { name : 'f9' , sequence : '\x1b[20~' , code : '[20~' } ,
164
+ { name : 'f10' , sequence : '\x1b[21~' , code : '[21~' } ,
165
+ { name : 'f11' , sequence : '\x1b[23~' , code : '[23~' } ,
166
+ { name : 'f12' , sequence : '\x1b[24~' , code : '[24~' } ,
167
+ ] ) ;
168
+
169
+ // xterm ESC [ letter
170
+ addTest ( '\x1b[A\x1b[B\x1b[C\x1b[D\x1b[E\x1b[F\x1b[H' , [
171
+ { name : 'up' , sequence : '\x1b[A' , code : '[A' } ,
172
+ { name : 'down' , sequence : '\x1b[B' , code : '[B' } ,
173
+ { name : 'right' , sequence : '\x1b[C' , code : '[C' } ,
174
+ { name : 'left' , sequence : '\x1b[D' , code : '[D' } ,
175
+ { name : 'clear' , sequence : '\x1b[E' , code : '[E' } ,
176
+ { name : 'end' , sequence : '\x1b[F' , code : '[F' } ,
177
+ { name : 'home' , sequence : '\x1b[H' , code : '[H' } ,
178
+ ] ) ;
179
+
180
+ // xterm/gnome ESC O letter
181
+ addTest ( '\x1bOA\x1bOB\x1bOC\x1bOD\x1bOE\x1bOF\x1bOH' , [
134
182
{ name : 'up' , sequence : '\x1bOA' , code : 'OA' } ,
135
183
{ name : 'down' , sequence : '\x1bOB' , code : 'OB' } ,
184
+ { name : 'right' , sequence : '\x1bOC' , code : 'OC' } ,
185
+ { name : 'left' , sequence : '\x1bOD' , code : 'OD' } ,
186
+ { name : 'clear' , sequence : '\x1bOE' , code : 'OE' } ,
187
+ { name : 'end' , sequence : '\x1bOF' , code : 'OF' } ,
188
+ { name : 'home' , sequence : '\x1bOH' , code : 'OH' } ,
136
189
] ) ;
137
190
138
191
// old xterm shift-arrows
@@ -141,6 +194,28 @@ addTest('\x1bO2A\x1bO2B', [
141
194
{ name : 'down' , sequence : '\x1bO2B' , code : 'OB' , shift : true } ,
142
195
] ) ;
143
196
197
+ // xterm/rxvt ESC [ number ~
198
+ addTest ( '\x1b[1~\x1b[2~\x1b[3~\x1b[4~\x1b[5~\x1b[6~' , [
199
+ { name : 'home' , sequence : '\x1b[1~' , code : '[1~' } ,
200
+ { name : 'insert' , sequence : '\x1b[2~' , code : '[2~' } ,
201
+ { name : 'delete' , sequence : '\x1b[3~' , code : '[3~' } ,
202
+ { name : 'end' , sequence : '\x1b[4~' , code : '[4~' } ,
203
+ { name : 'pageup' , sequence : '\x1b[5~' , code : '[5~' } ,
204
+ { name : 'pagedown' , sequence : '\x1b[6~' , code : '[6~' } ,
205
+ ] ) ;
206
+
207
+ // putty
208
+ addTest ( '\x1b[[5~\x1b[[6~' , [
209
+ { name : 'pageup' , sequence : '\x1b[[5~' , code : '[[5~' } ,
210
+ { name : 'pagedown' , sequence : '\x1b[[6~' , code : '[[6~' } ,
211
+ ] ) ;
212
+
213
+ // rxvt
214
+ addTest ( '\x1b[7~\x1b[8~' , [
215
+ { name : 'home' , sequence : '\x1b[7~' , code : '[7~' } ,
216
+ { name : 'end' , sequence : '\x1b[8~' , code : '[8~' } ,
217
+ ] ) ;
218
+
144
219
// gnome terminal
145
220
addTest ( '\x1b[A\x1b[B\x1b[2A\x1b[2B' , [
146
221
{ name : 'up' , sequence : '\x1b[A' , code : '[A' } ,
@@ -149,11 +224,27 @@ addTest('\x1b[A\x1b[B\x1b[2A\x1b[2B', [
149
224
{ name : 'down' , sequence : '\x1b[2B' , code : '[B' , shift : true } ,
150
225
] ) ;
151
226
152
- // rxvt
153
- addTest ( '\x1b[20~\x1b[2$\x1b[2^' , [
227
+ // rxvt keys with modifiers
228
+ // eslint-disable-next-line max-len
229
+ addTest ( '\x1b[20~\x1b[2$\x1b[2^\x1b[3$\x1b[3^\x1b[5$\x1b[5^\x1b[6$\x1b[6^\x1b[7$\x1b[7^\x1b[8$\x1b[8^' , [
154
230
{ name : 'f9' , sequence : '\x1b[20~' , code : '[20~' } ,
155
231
{ name : 'insert' , sequence : '\x1b[2$' , code : '[2$' , shift : true } ,
156
232
{ name : 'insert' , sequence : '\x1b[2^' , code : '[2^' , ctrl : true } ,
233
+ { name : 'delete' , sequence : '\x1b[3$' , code : '[3$' , shift : true } ,
234
+ { name : 'delete' , sequence : '\x1b[3^' , code : '[3^' , ctrl : true } ,
235
+ { name : 'pageup' , sequence : '\x1b[5$' , code : '[5$' , shift : true } ,
236
+ { name : 'pageup' , sequence : '\x1b[5^' , code : '[5^' , ctrl : true } ,
237
+ { name : 'pagedown' , sequence : '\x1b[6$' , code : '[6$' , shift : true } ,
238
+ { name : 'pagedown' , sequence : '\x1b[6^' , code : '[6^' , ctrl : true } ,
239
+ { name : 'home' , sequence : '\x1b[7$' , code : '[7$' , shift : true } ,
240
+ { name : 'home' , sequence : '\x1b[7^' , code : '[7^' , ctrl : true } ,
241
+ { name : 'end' , sequence : '\x1b[8$' , code : '[8$' , shift : true } ,
242
+ { name : 'end' , sequence : '\x1b[8^' , code : '[8^' , ctrl : true } ,
243
+ ] ) ;
244
+
245
+ // misc
246
+ addTest ( '\x1b[Z' , [
247
+ { name : 'tab' , sequence : '\x1b[Z' , code : '[Z' , shift : true } ,
157
248
] ) ;
158
249
159
250
// xterm + modifiers
0 commit comments