reline 0.2.8.pre.7 → 0.2.8.pre.11
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/ansi.rb +8 -3
- data/lib/reline/config.rb +20 -3
- data/lib/reline/key_actor/emacs.rb +1 -1
- data/lib/reline/key_stroke.rb +63 -14
- data/lib/reline/line_editor.rb +223 -74
- data/lib/reline/terminfo.rb +1 -1
- data/lib/reline/unicode.rb +3 -3
- data/lib/reline/version.rb +1 -1
- data/lib/reline/windows.rb +18 -16
- data/lib/reline.rb +53 -27
- metadata +3 -4
- data/lib/reline/line_editor.rb.orig +0 -3156
data/lib/reline.rb
CHANGED
@@ -17,14 +17,23 @@ module Reline
|
|
17
17
|
class ConfigEncodingConversionError < StandardError; end
|
18
18
|
|
19
19
|
Key = Struct.new('Key', :char, :combined_char, :with_meta) do
|
20
|
-
def match?(
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
def match?(other)
|
21
|
+
case other
|
22
|
+
when Reline::Key
|
23
|
+
(other.char.nil? or char.nil? or char == other.char) and
|
24
|
+
(other.combined_char.nil? or combined_char.nil? or combined_char == other.combined_char) and
|
25
|
+
(other.with_meta.nil? or with_meta.nil? or with_meta == other.with_meta)
|
26
|
+
when Integer, Symbol
|
27
|
+
(combined_char and combined_char == other) or
|
28
|
+
(combined_char.nil? and char and char == other)
|
29
|
+
else
|
30
|
+
false
|
31
|
+
end
|
24
32
|
end
|
33
|
+
alias_method :==, :match?
|
25
34
|
end
|
26
35
|
CursorPos = Struct.new(:x, :y)
|
27
|
-
DialogRenderInfo = Struct.new(:pos, :contents, :
|
36
|
+
DialogRenderInfo = Struct.new(:pos, :contents, :bg_color, :width, :height, :scrollbar, keyword_init: true)
|
28
37
|
|
29
38
|
class Core
|
30
39
|
ATTR_READER_NAMES = %i(
|
@@ -201,7 +210,7 @@ module Reline
|
|
201
210
|
return nil
|
202
211
|
end
|
203
212
|
pre, target, post = retrieve_completion_block(true)
|
204
|
-
if target.nil? or target.empty? or target.size <= 3
|
213
|
+
if target.nil? or target.empty? or (completion_journey_data&.pointer == -1 and target.size <= 3)
|
205
214
|
return nil
|
206
215
|
end
|
207
216
|
if completion_journey_data and completion_journey_data.list
|
@@ -228,7 +237,8 @@ module Reline
|
|
228
237
|
context.clear
|
229
238
|
context.push(cursor_pos_to_render, result, pointer, dialog)
|
230
239
|
end
|
231
|
-
|
240
|
+
dialog.pointer = pointer
|
241
|
+
DialogRenderInfo.new(pos: cursor_pos_to_render, contents: result, scrollbar: true, height: 15)
|
232
242
|
}
|
233
243
|
Reline::DEFAULT_DIALOG_CONTEXT = Array.new
|
234
244
|
|
@@ -368,25 +378,9 @@ module Reline
|
|
368
378
|
break
|
369
379
|
when :matching
|
370
380
|
if buffer.size == 1
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
succ_c = Reline::IOGate.getc
|
375
|
-
}
|
376
|
-
rescue Timeout::Error # cancel matching only when first byte
|
377
|
-
block.([Reline::Key.new(c, c, false)])
|
378
|
-
break
|
379
|
-
else
|
380
|
-
if key_stroke.match_status(buffer.dup.push(succ_c)) == :unmatched
|
381
|
-
if c == "\e".ord
|
382
|
-
block.([Reline::Key.new(succ_c, succ_c | 0b10000000, true)])
|
383
|
-
else
|
384
|
-
block.([Reline::Key.new(c, c, false), Reline::Key.new(succ_c, succ_c, false)])
|
385
|
-
end
|
386
|
-
break
|
387
|
-
else
|
388
|
-
Reline::IOGate.ungetc(succ_c)
|
389
|
-
end
|
381
|
+
case read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
|
382
|
+
when :break then break
|
383
|
+
when :next then next
|
390
384
|
end
|
391
385
|
end
|
392
386
|
when :unmatched
|
@@ -403,6 +397,38 @@ module Reline
|
|
403
397
|
end
|
404
398
|
end
|
405
399
|
|
400
|
+
private def read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
|
401
|
+
begin
|
402
|
+
succ_c = nil
|
403
|
+
Timeout.timeout(keyseq_timeout / 1000.0) {
|
404
|
+
succ_c = Reline::IOGate.getc
|
405
|
+
}
|
406
|
+
rescue Timeout::Error # cancel matching only when first byte
|
407
|
+
block.([Reline::Key.new(c, c, false)])
|
408
|
+
return :break
|
409
|
+
else
|
410
|
+
case key_stroke.match_status(buffer.dup.push(succ_c))
|
411
|
+
when :unmatched
|
412
|
+
if c == "\e".ord
|
413
|
+
block.([Reline::Key.new(succ_c, succ_c | 0b10000000, true)])
|
414
|
+
else
|
415
|
+
block.([Reline::Key.new(c, c, false), Reline::Key.new(succ_c, succ_c, false)])
|
416
|
+
end
|
417
|
+
return :break
|
418
|
+
when :matching
|
419
|
+
Reline::IOGate.ungetc(succ_c)
|
420
|
+
return :next
|
421
|
+
when :matched
|
422
|
+
buffer << succ_c
|
423
|
+
expanded = key_stroke.expand(buffer).map{ |expanded_c|
|
424
|
+
Reline::Key.new(expanded_c, expanded_c, false)
|
425
|
+
}
|
426
|
+
block.(expanded)
|
427
|
+
return :break
|
428
|
+
end
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
406
432
|
private def read_escaped_key(keyseq_timeout, c, block)
|
407
433
|
begin
|
408
434
|
escaped_c = nil
|
@@ -454,7 +480,7 @@ module Reline
|
|
454
480
|
#--------------------------------------------------------
|
455
481
|
|
456
482
|
(Core::ATTR_READER_NAMES).each { |name|
|
457
|
-
def_single_delegators :core, "#{name}", "#{name}="
|
483
|
+
def_single_delegators :core, :"#{name}", :"#{name}="
|
458
484
|
}
|
459
485
|
def_single_delegators :core, :input=, :output=
|
460
486
|
def_single_delegators :core, :vi_editing_mode, :emacs_editing_mode
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.8.pre.
|
4
|
+
version: 0.2.8.pre.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aycabta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09
|
11
|
+
date: 2021-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: io-console
|
@@ -47,7 +47,6 @@ files:
|
|
47
47
|
- lib/reline/key_stroke.rb
|
48
48
|
- lib/reline/kill_ring.rb
|
49
49
|
- lib/reline/line_editor.rb
|
50
|
-
- lib/reline/line_editor.rb.orig
|
51
50
|
- lib/reline/sibori.rb
|
52
51
|
- lib/reline/terminfo.rb
|
53
52
|
- lib/reline/unicode.rb
|
@@ -74,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
73
|
- !ruby/object:Gem::Version
|
75
74
|
version: 1.3.1
|
76
75
|
requirements: []
|
77
|
-
rubygems_version: 3.
|
76
|
+
rubygems_version: 3.1.6
|
78
77
|
signing_key:
|
79
78
|
specification_version: 4
|
80
79
|
summary: Alternative GNU Readline or Editline implementation by pure Ruby.
|