reline 0.5.10 → 0.6.0
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.
- checksums.yaml +4 -4
- data/lib/reline/config.rb +22 -26
- data/lib/reline/history.rb +3 -3
- data/lib/reline/io/ansi.rb +64 -111
- data/lib/reline/io/dumb.rb +16 -2
- data/lib/reline/io/windows.rb +77 -60
- data/lib/reline/io.rb +14 -0
- data/lib/reline/key_actor/base.rb +10 -4
- data/lib/reline/key_actor/emacs.rb +96 -96
- data/lib/reline/key_actor/vi_command.rb +182 -182
- data/lib/reline/key_actor/vi_insert.rb +137 -137
- data/lib/reline/key_stroke.rb +26 -16
- data/lib/reline/line_editor.rb +238 -404
- data/lib/reline/unicode.rb +140 -396
- data/lib/reline/version.rb +1 -1
- data/lib/reline.rb +18 -18
- metadata +6 -4
- data/lib/reline/terminfo.rb +0 -158
@@ -1,7 +1,7 @@
|
|
1
1
|
module Reline::KeyActor
|
2
2
|
VI_INSERT_MAPPING = [
|
3
3
|
# 0 ^@
|
4
|
-
|
4
|
+
nil,
|
5
5
|
# 1 ^A
|
6
6
|
:ed_insert,
|
7
7
|
# 2 ^B
|
@@ -97,25 +97,25 @@ module Reline::KeyActor
|
|
97
97
|
# 47 /
|
98
98
|
:ed_insert,
|
99
99
|
# 48 0
|
100
|
-
:
|
100
|
+
:ed_digit,
|
101
101
|
# 49 1
|
102
|
-
:
|
102
|
+
:ed_digit,
|
103
103
|
# 50 2
|
104
|
-
:
|
104
|
+
:ed_digit,
|
105
105
|
# 51 3
|
106
|
-
:
|
106
|
+
:ed_digit,
|
107
107
|
# 52 4
|
108
|
-
:
|
108
|
+
:ed_digit,
|
109
109
|
# 53 5
|
110
|
-
:
|
110
|
+
:ed_digit,
|
111
111
|
# 54 6
|
112
|
-
:
|
112
|
+
:ed_digit,
|
113
113
|
# 55 7
|
114
|
-
:
|
114
|
+
:ed_digit,
|
115
115
|
# 56 8
|
116
|
-
:
|
116
|
+
:ed_digit,
|
117
117
|
# 57 9
|
118
|
-
:
|
118
|
+
:ed_digit,
|
119
119
|
# 58 :
|
120
120
|
:ed_insert,
|
121
121
|
# 59 ;
|
@@ -257,261 +257,261 @@ module Reline::KeyActor
|
|
257
257
|
# 127 ^?
|
258
258
|
:vi_delete_prev_char,
|
259
259
|
# 128 M-^@
|
260
|
-
|
260
|
+
nil,
|
261
261
|
# 129 M-^A
|
262
|
-
|
262
|
+
nil,
|
263
263
|
# 130 M-^B
|
264
|
-
|
264
|
+
nil,
|
265
265
|
# 131 M-^C
|
266
|
-
|
266
|
+
nil,
|
267
267
|
# 132 M-^D
|
268
|
-
|
268
|
+
nil,
|
269
269
|
# 133 M-^E
|
270
|
-
|
270
|
+
nil,
|
271
271
|
# 134 M-^F
|
272
|
-
|
272
|
+
nil,
|
273
273
|
# 135 M-^G
|
274
|
-
|
274
|
+
nil,
|
275
275
|
# 136 M-^H
|
276
|
-
|
276
|
+
nil,
|
277
277
|
# 137 M-^I
|
278
|
-
|
278
|
+
nil,
|
279
279
|
# 138 M-^J
|
280
280
|
:key_newline,
|
281
281
|
# 139 M-^K
|
282
|
-
|
282
|
+
nil,
|
283
283
|
# 140 M-^L
|
284
|
-
|
284
|
+
nil,
|
285
285
|
# 141 M-^M
|
286
286
|
:key_newline,
|
287
287
|
# 142 M-^N
|
288
|
-
|
288
|
+
nil,
|
289
289
|
# 143 M-^O
|
290
|
-
|
290
|
+
nil,
|
291
291
|
# 144 M-^P
|
292
|
-
|
292
|
+
nil,
|
293
293
|
# 145 M-^Q
|
294
|
-
|
294
|
+
nil,
|
295
295
|
# 146 M-^R
|
296
|
-
|
296
|
+
nil,
|
297
297
|
# 147 M-^S
|
298
|
-
|
298
|
+
nil,
|
299
299
|
# 148 M-^T
|
300
|
-
|
300
|
+
nil,
|
301
301
|
# 149 M-^U
|
302
|
-
|
302
|
+
nil,
|
303
303
|
# 150 M-^V
|
304
|
-
|
304
|
+
nil,
|
305
305
|
# 151 M-^W
|
306
|
-
|
306
|
+
nil,
|
307
307
|
# 152 M-^X
|
308
|
-
|
308
|
+
nil,
|
309
309
|
# 153 M-^Y
|
310
|
-
|
310
|
+
nil,
|
311
311
|
# 154 M-^Z
|
312
|
-
|
312
|
+
nil,
|
313
313
|
# 155 M-^[
|
314
|
-
|
314
|
+
nil,
|
315
315
|
# 156 M-^\
|
316
|
-
|
316
|
+
nil,
|
317
317
|
# 157 M-^]
|
318
|
-
|
318
|
+
nil,
|
319
319
|
# 158 M-^^
|
320
|
-
|
320
|
+
nil,
|
321
321
|
# 159 M-^_
|
322
|
-
|
322
|
+
nil,
|
323
323
|
# 160 M-SPACE
|
324
|
-
|
324
|
+
nil,
|
325
325
|
# 161 M-!
|
326
|
-
|
326
|
+
nil,
|
327
327
|
# 162 M-"
|
328
|
-
|
328
|
+
nil,
|
329
329
|
# 163 M-#
|
330
|
-
|
330
|
+
nil,
|
331
331
|
# 164 M-$
|
332
|
-
|
332
|
+
nil,
|
333
333
|
# 165 M-%
|
334
|
-
|
334
|
+
nil,
|
335
335
|
# 166 M-&
|
336
|
-
|
336
|
+
nil,
|
337
337
|
# 167 M-'
|
338
|
-
|
338
|
+
nil,
|
339
339
|
# 168 M-(
|
340
|
-
|
340
|
+
nil,
|
341
341
|
# 169 M-)
|
342
|
-
|
342
|
+
nil,
|
343
343
|
# 170 M-*
|
344
|
-
|
344
|
+
nil,
|
345
345
|
# 171 M-+
|
346
|
-
|
346
|
+
nil,
|
347
347
|
# 172 M-,
|
348
|
-
|
348
|
+
nil,
|
349
349
|
# 173 M--
|
350
|
-
|
350
|
+
nil,
|
351
351
|
# 174 M-.
|
352
|
-
|
352
|
+
nil,
|
353
353
|
# 175 M-/
|
354
|
-
|
354
|
+
nil,
|
355
355
|
# 176 M-0
|
356
|
-
|
356
|
+
nil,
|
357
357
|
# 177 M-1
|
358
|
-
|
358
|
+
nil,
|
359
359
|
# 178 M-2
|
360
|
-
|
360
|
+
nil,
|
361
361
|
# 179 M-3
|
362
|
-
|
362
|
+
nil,
|
363
363
|
# 180 M-4
|
364
|
-
|
364
|
+
nil,
|
365
365
|
# 181 M-5
|
366
|
-
|
366
|
+
nil,
|
367
367
|
# 182 M-6
|
368
|
-
|
368
|
+
nil,
|
369
369
|
# 183 M-7
|
370
|
-
|
370
|
+
nil,
|
371
371
|
# 184 M-8
|
372
|
-
|
372
|
+
nil,
|
373
373
|
# 185 M-9
|
374
|
-
|
374
|
+
nil,
|
375
375
|
# 186 M-:
|
376
|
-
|
376
|
+
nil,
|
377
377
|
# 187 M-;
|
378
|
-
|
378
|
+
nil,
|
379
379
|
# 188 M-<
|
380
|
-
|
380
|
+
nil,
|
381
381
|
# 189 M-=
|
382
|
-
|
382
|
+
nil,
|
383
383
|
# 190 M->
|
384
|
-
|
384
|
+
nil,
|
385
385
|
# 191 M-?
|
386
|
-
|
386
|
+
nil,
|
387
387
|
# 192 M-@
|
388
|
-
|
388
|
+
nil,
|
389
389
|
# 193 M-A
|
390
|
-
|
390
|
+
nil,
|
391
391
|
# 194 M-B
|
392
|
-
|
392
|
+
nil,
|
393
393
|
# 195 M-C
|
394
|
-
|
394
|
+
nil,
|
395
395
|
# 196 M-D
|
396
|
-
|
396
|
+
nil,
|
397
397
|
# 197 M-E
|
398
|
-
|
398
|
+
nil,
|
399
399
|
# 198 M-F
|
400
|
-
|
400
|
+
nil,
|
401
401
|
# 199 M-G
|
402
|
-
|
402
|
+
nil,
|
403
403
|
# 200 M-H
|
404
|
-
|
404
|
+
nil,
|
405
405
|
# 201 M-I
|
406
|
-
|
406
|
+
nil,
|
407
407
|
# 202 M-J
|
408
|
-
|
408
|
+
nil,
|
409
409
|
# 203 M-K
|
410
|
-
|
410
|
+
nil,
|
411
411
|
# 204 M-L
|
412
|
-
|
412
|
+
nil,
|
413
413
|
# 205 M-M
|
414
|
-
|
414
|
+
nil,
|
415
415
|
# 206 M-N
|
416
|
-
|
416
|
+
nil,
|
417
417
|
# 207 M-O
|
418
|
-
|
418
|
+
nil,
|
419
419
|
# 208 M-P
|
420
|
-
|
420
|
+
nil,
|
421
421
|
# 209 M-Q
|
422
|
-
|
422
|
+
nil,
|
423
423
|
# 210 M-R
|
424
|
-
|
424
|
+
nil,
|
425
425
|
# 211 M-S
|
426
|
-
|
426
|
+
nil,
|
427
427
|
# 212 M-T
|
428
|
-
|
428
|
+
nil,
|
429
429
|
# 213 M-U
|
430
|
-
|
430
|
+
nil,
|
431
431
|
# 214 M-V
|
432
|
-
|
432
|
+
nil,
|
433
433
|
# 215 M-W
|
434
|
-
|
434
|
+
nil,
|
435
435
|
# 216 M-X
|
436
|
-
|
436
|
+
nil,
|
437
437
|
# 217 M-Y
|
438
|
-
|
438
|
+
nil,
|
439
439
|
# 218 M-Z
|
440
|
-
|
440
|
+
nil,
|
441
441
|
# 219 M-[
|
442
|
-
|
442
|
+
nil,
|
443
443
|
# 220 M-\
|
444
|
-
|
444
|
+
nil,
|
445
445
|
# 221 M-]
|
446
|
-
|
446
|
+
nil,
|
447
447
|
# 222 M-^
|
448
|
-
|
448
|
+
nil,
|
449
449
|
# 223 M-_
|
450
|
-
|
450
|
+
nil,
|
451
451
|
# 224 M-`
|
452
|
-
|
452
|
+
nil,
|
453
453
|
# 225 M-a
|
454
|
-
|
454
|
+
nil,
|
455
455
|
# 226 M-b
|
456
|
-
|
456
|
+
nil,
|
457
457
|
# 227 M-c
|
458
|
-
|
458
|
+
nil,
|
459
459
|
# 228 M-d
|
460
|
-
|
460
|
+
nil,
|
461
461
|
# 229 M-e
|
462
|
-
|
462
|
+
nil,
|
463
463
|
# 230 M-f
|
464
|
-
|
464
|
+
nil,
|
465
465
|
# 231 M-g
|
466
|
-
|
466
|
+
nil,
|
467
467
|
# 232 M-h
|
468
|
-
|
468
|
+
nil,
|
469
469
|
# 233 M-i
|
470
|
-
|
470
|
+
nil,
|
471
471
|
# 234 M-j
|
472
|
-
|
472
|
+
nil,
|
473
473
|
# 235 M-k
|
474
|
-
|
474
|
+
nil,
|
475
475
|
# 236 M-l
|
476
|
-
|
476
|
+
nil,
|
477
477
|
# 237 M-m
|
478
|
-
|
478
|
+
nil,
|
479
479
|
# 238 M-n
|
480
|
-
|
480
|
+
nil,
|
481
481
|
# 239 M-o
|
482
|
-
|
482
|
+
nil,
|
483
483
|
# 240 M-p
|
484
|
-
|
484
|
+
nil,
|
485
485
|
# 241 M-q
|
486
|
-
|
486
|
+
nil,
|
487
487
|
# 242 M-r
|
488
|
-
|
488
|
+
nil,
|
489
489
|
# 243 M-s
|
490
|
-
|
490
|
+
nil,
|
491
491
|
# 244 M-t
|
492
|
-
|
492
|
+
nil,
|
493
493
|
# 245 M-u
|
494
|
-
|
494
|
+
nil,
|
495
495
|
# 246 M-v
|
496
|
-
|
496
|
+
nil,
|
497
497
|
# 247 M-w
|
498
|
-
|
498
|
+
nil,
|
499
499
|
# 248 M-x
|
500
|
-
|
500
|
+
nil,
|
501
501
|
# 249 M-y
|
502
|
-
|
502
|
+
nil,
|
503
503
|
# 250 M-z
|
504
|
-
|
504
|
+
nil,
|
505
505
|
# 251 M-{
|
506
|
-
|
506
|
+
nil,
|
507
507
|
# 252 M-|
|
508
|
-
|
508
|
+
nil,
|
509
509
|
# 253 M-}
|
510
|
-
|
510
|
+
nil,
|
511
511
|
# 254 M-~
|
512
|
-
|
512
|
+
nil,
|
513
513
|
# 255 M-^?
|
514
|
-
|
514
|
+
nil
|
515
515
|
# EOF
|
516
516
|
]
|
517
517
|
end
|
data/lib/reline/key_stroke.rb
CHANGED
@@ -3,8 +3,11 @@ class Reline::KeyStroke
|
|
3
3
|
CSI_PARAMETER_BYTES_RANGE = 0x30..0x3f
|
4
4
|
CSI_INTERMEDIATE_BYTES_RANGE = (0x20..0x2f)
|
5
5
|
|
6
|
-
|
6
|
+
attr_accessor :encoding
|
7
|
+
|
8
|
+
def initialize(config, encoding)
|
7
9
|
@config = config
|
10
|
+
@encoding = encoding
|
8
11
|
end
|
9
12
|
|
10
13
|
# Input exactly matches to a key sequence
|
@@ -19,11 +22,6 @@ class Reline::KeyStroke
|
|
19
22
|
def match_status(input)
|
20
23
|
matching = key_mapping.matching?(input)
|
21
24
|
matched = key_mapping.get(input)
|
22
|
-
|
23
|
-
# FIXME: Workaround for single byte. remove this after MAPPING is merged into KeyActor.
|
24
|
-
matched ||= input.size == 1
|
25
|
-
matching ||= input == [ESC_BYTE]
|
26
|
-
|
27
25
|
if matching && matched
|
28
26
|
MATCHING_MATCHED
|
29
27
|
elsif matching
|
@@ -32,10 +30,14 @@ class Reline::KeyStroke
|
|
32
30
|
MATCHED
|
33
31
|
elsif input[0] == ESC_BYTE
|
34
32
|
match_unknown_escape_sequence(input, vi_mode: @config.editing_mode_is?(:vi_insert, :vi_command))
|
35
|
-
elsif input.size == 1
|
36
|
-
MATCHED
|
37
33
|
else
|
38
|
-
|
34
|
+
s = input.pack('c*').force_encoding(@encoding)
|
35
|
+
if s.valid_encoding?
|
36
|
+
s.size == 1 ? MATCHED : UNMATCHED
|
37
|
+
else
|
38
|
+
# Invalid string is MATCHING (part of valid string) or MATCHED (invalid bytes to be ignored)
|
39
|
+
MATCHING_MATCHED
|
40
|
+
end
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
@@ -45,20 +47,28 @@ class Reline::KeyStroke
|
|
45
47
|
bytes = input.take(i)
|
46
48
|
status = match_status(bytes)
|
47
49
|
matched_bytes = bytes if status == MATCHED || status == MATCHING_MATCHED
|
50
|
+
break if status == MATCHED || status == UNMATCHED
|
48
51
|
end
|
49
52
|
return [[], []] unless matched_bytes
|
50
53
|
|
51
54
|
func = key_mapping.get(matched_bytes)
|
55
|
+
s = matched_bytes.pack('c*').force_encoding(@encoding)
|
52
56
|
if func.is_a?(Array)
|
53
|
-
|
57
|
+
# Perform simple macro expansion for single byte key bindings.
|
58
|
+
# Multibyte key bindings and recursive macro expansion are not supported yet.
|
59
|
+
marco = func.pack('c*').force_encoding(@encoding)
|
60
|
+
keys = marco.chars.map do |c|
|
61
|
+
f = key_mapping.get(c.bytes)
|
62
|
+
Reline::Key.new(c, f.is_a?(Symbol) ? f : :ed_insert, false)
|
63
|
+
end
|
54
64
|
elsif func
|
55
|
-
keys = [Reline::Key.new(
|
56
|
-
elsif matched_bytes.size == 1
|
57
|
-
keys = [Reline::Key.new(matched_bytes.first, matched_bytes.first, false)]
|
58
|
-
elsif matched_bytes.size == 2 && matched_bytes[0] == ESC_BYTE
|
59
|
-
keys = [Reline::Key.new(matched_bytes[1], matched_bytes[1] | 0b10000000, true)]
|
65
|
+
keys = [Reline::Key.new(s, func, false)]
|
60
66
|
else
|
61
|
-
|
67
|
+
if s.valid_encoding? && s.size == 1
|
68
|
+
keys = [Reline::Key.new(s, :ed_insert, false)]
|
69
|
+
else
|
70
|
+
keys = []
|
71
|
+
end
|
62
72
|
end
|
63
73
|
|
64
74
|
[keys, input.drop(matched_bytes.size)]
|