reline 0.2.8.pre.1 → 0.2.8.pre.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c1dd7202ef6de3ebf89e2ed39c83af1e48bcd46d5f967037edc0097301b8286
4
- data.tar.gz: 4d2047341862d83b785903974e4766b5a3d481a033208bfcc1d8891a0b116e65
3
+ metadata.gz: fca2b6f76f8c59a18589d6d730f7f159e25b95e639ae7d6866f772e9bb2655ab
4
+ data.tar.gz: 61b69c3d01f74b957c6a2d646e58021cad4b49031d4fdf6437f2303d417d5f36
5
5
  SHA512:
6
- metadata.gz: a9109bb68de735bd5dba6de8dffecfd23fecd8f09aa0b1f92d0bca6b008ef7c3d3785c16292db8ea90c9baf4d275ef382cd6d0d15487fbe6e491c74a670004bd
7
- data.tar.gz: af8f8b99ceb34416253857caf4d87a07bde1fddf72d80ff14caeb2a5940178566bd63fc4a6884eddd60959ac3f352c056bb73bbe646915582b5b3b4d091beeed
6
+ metadata.gz: 561ffdbf39c095852f0a642178d5328329cea072fdc91c32bd11edfdcecb4846414006961b6fe7adbf63c825022a8634d5a563fdeb574d127088b536967e1f9c
7
+ data.tar.gz: 07e62e55ca7a45d3b747724823b26af09d109f9620ba82914cfaf7e6100251bb76bd0de7b01b9829b51e41248a32b028bbbb3617c7d4eedfc2c1d05ab701a236
data/lib/reline/ansi.rb CHANGED
@@ -37,6 +37,7 @@ class Reline::ANSI
37
37
  # default bindings
38
38
  [27, 32] => :em_set_mark, # M-<space>
39
39
  [24, 24] => :em_exchange_mark, # C-x C-x
40
+ [27, 91, 90] => :completion_journey_up, # S-Tab
40
41
  }.each_pair do |key, func|
41
42
  config.add_default_key_binding_by_keymap(:emacs, key, func)
42
43
  end
data/lib/reline/config.rb CHANGED
@@ -65,6 +65,7 @@ class Reline::Config
65
65
  @history_size = -1 # unlimited
66
66
  @keyseq_timeout = 500
67
67
  @test_mode = false
68
+ @autocompletion = false
68
69
  end
69
70
 
70
71
  def reset
@@ -89,6 +90,14 @@ class Reline::Config
89
90
  (val.respond_to?(:any?) ? val : [val]).any?(@editing_mode_label)
90
91
  end
91
92
 
93
+ def autocompletion=(val)
94
+ @autocompletion = val
95
+ end
96
+
97
+ def autocompletion
98
+ @autocompletion
99
+ end
100
+
92
101
  def keymap
93
102
  @key_actors[@keymap_label]
94
103
  end
@@ -479,8 +479,9 @@ class Reline::LineEditor
479
479
  end
480
480
 
481
481
  class DialogProcScope
482
- def initialize(line_editor, proc_to_exec, context)
482
+ def initialize(line_editor, config, proc_to_exec, context)
483
483
  @line_editor = line_editor
484
+ @config = config
484
485
  @proc_to_exec = proc_to_exec
485
486
  @context = context
486
487
  @cursor_pos = Reline::CursorPos.new
@@ -498,6 +499,14 @@ class Reline::LineEditor
498
499
  @line_editor.call_completion_proc_with_checking_args(pre, target, post)
499
500
  end
500
501
 
502
+ def set_dialog(dialog)
503
+ @dialog = dialog
504
+ end
505
+
506
+ def dialog
507
+ @dialog
508
+ end
509
+
501
510
  def set_cursor_pos(col, row)
502
511
  @cursor_pos.x = col
503
512
  @cursor_pos.y = row
@@ -519,32 +528,50 @@ class Reline::LineEditor
519
528
  @line_editor.instance_variable_get(:@completion_journey_data)
520
529
  end
521
530
 
531
+ def config
532
+ @config
533
+ end
534
+
522
535
  def call
523
536
  instance_exec(&@proc_to_exec)
524
537
  end
525
538
  end
526
539
 
527
540
  class Dialog
528
- attr_reader :name
529
- attr_accessor :column, :vertical_offset, :contents, :lines_backup
541
+ attr_reader :name, :contents, :width
542
+ attr_accessor :scroll_top, :column, :vertical_offset, :lines_backup
530
543
 
531
544
  def initialize(name, proc_scope)
532
545
  @name = name
533
546
  @proc_scope = proc_scope
547
+ @width = nil
548
+ @scroll_top = 0
534
549
  end
535
550
 
536
551
  def set_cursor_pos(col, row)
537
552
  @proc_scope.set_cursor_pos(col, row)
538
553
  end
539
554
 
555
+ def width=(v)
556
+ @width = v
557
+ end
558
+
559
+ def contents=(contents)
560
+ @contents = contents
561
+ if contents and @width.nil?
562
+ @width = contents.map{ |line| Reline::Unicode.calculate_width(line, true) }.max
563
+ end
564
+ end
565
+
540
566
  def call
567
+ @proc_scope.set_dialog(self)
541
568
  @proc_scope.call
542
569
  end
543
570
  end
544
571
 
545
572
  def add_dialog_proc(name, p, context = nil)
546
573
  return if @dialogs.any? { |d| d.name == name }
547
- @dialogs << Dialog.new(name, DialogProcScope.new(self, p, context))
574
+ @dialogs << Dialog.new(name, DialogProcScope.new(self, @config, p, context))
548
575
  end
549
576
 
550
577
  DIALOG_HEIGHT = 20
@@ -561,13 +588,26 @@ class Reline::LineEditor
561
588
  return
562
589
  end
563
590
  dialog.set_cursor_pos(cursor_column, @first_line_started_from + @started_from)
564
- pos, result, pointer, bg = dialog.call
565
- old_dialog_contents = dialog.contents
566
- old_dialog_column = dialog.column
567
- old_dialog_vertical_offset = dialog.vertical_offset
568
- if result and not result.empty?
569
- dialog.contents = result
570
- dialog.contents = dialog.contents[0...DIALOG_HEIGHT] if dialog.contents.size > DIALOG_HEIGHT
591
+ dialog_render_info = dialog.call
592
+ dialog.width = dialog_render_info.width if dialog_render_info and dialog_render_info.width
593
+ old_dialog = dialog.clone
594
+ if dialog_render_info and dialog_render_info.contents and not dialog_render_info.contents.empty?
595
+ height = dialog_render_info.height || DIALOG_HEIGHT
596
+ pointer = dialog_render_info.pointer
597
+ dialog.contents = dialog_render_info.contents
598
+ if dialog.contents.size > height
599
+ if dialog_render_info.pointer
600
+ if dialog_render_info.pointer < 0
601
+ dialog.scroll_top = 0
602
+ elsif (dialog_render_info.pointer - dialog.scroll_top) >= (height - 1)
603
+ dialog.scroll_top = dialog_render_info.pointer - (height - 1)
604
+ elsif (dialog_render_info.pointer - dialog.scroll_top) < 0
605
+ dialog.scroll_top = dialog_render_info.pointer
606
+ end
607
+ pointer = dialog_render_info.pointer - dialog.scroll_top
608
+ end
609
+ dialog.contents = dialog.contents[dialog.scroll_top, height]
610
+ end
571
611
  else
572
612
  dialog.lines_backup = {
573
613
  lines: modify_lines(whole_lines),
@@ -582,37 +622,37 @@ class Reline::LineEditor
582
622
  end
583
623
  upper_space = @first_line_started_from - @started_from
584
624
  lower_space = @highest_in_all - @first_line_started_from - @started_from - 1
585
- dialog.column = pos.x
586
- diff = (dialog.column + DIALOG_WIDTH) - (@screen_size.last - 1)
625
+ dialog.column = dialog_render_info.pos.x
626
+ diff = (dialog.column + dialog.width) - (@screen_size.last - 1)
587
627
  if diff > 0
588
628
  dialog.column -= diff
589
629
  end
590
- if (lower_space + @rest_height) >= DIALOG_HEIGHT
591
- dialog.vertical_offset = pos.y + 1
592
- elsif upper_space >= DIALOG_HEIGHT
593
- dialog.vertical_offset = pos.y + -(DIALOG_HEIGHT + 1)
630
+ if (lower_space + @rest_height - dialog_render_info.pos.y) >= height
631
+ dialog.vertical_offset = dialog_render_info.pos.y + 1
632
+ elsif upper_space >= height
633
+ dialog.vertical_offset = dialog_render_info.pos.y + -(height + 1)
594
634
  else
595
- if (lower_space + @rest_height) < DIALOG_HEIGHT
596
- scroll_down(DIALOG_HEIGHT)
597
- move_cursor_up(DIALOG_HEIGHT)
635
+ if (lower_space + @rest_height - dialog_render_info.pos.y) < height
636
+ scroll_down(height + dialog_render_info.pos.y)
637
+ move_cursor_up(height + dialog_render_info.pos.y)
598
638
  end
599
- dialog.vertical_offset = pos.y + 1
639
+ dialog.vertical_offset = dialog_render_info.pos.y + 1
600
640
  end
601
641
  Reline::IOGate.hide_cursor
602
- reset_dialog(dialog, old_dialog_contents, old_dialog_column, old_dialog_vertical_offset)
642
+ reset_dialog(dialog, old_dialog)
603
643
  move_cursor_down(dialog.vertical_offset)
604
644
  Reline::IOGate.move_cursor_column(dialog.column)
605
645
  dialog.contents.each_with_index do |item, i|
606
646
  if i == pointer
607
647
  bg_color = '45'
608
648
  else
609
- if bg
610
- bg_color = bg
649
+ if dialog_render_info.bg_color
650
+ bg_color = dialog_render_info.bg_color
611
651
  else
612
652
  bg_color = '46'
613
653
  end
614
654
  end
615
- @output.write "\e[#{bg_color}m%-#{DIALOG_WIDTH}s\e[49m" % item.slice(0, DIALOG_WIDTH)
655
+ @output.write "\e[#{bg_color}m%-#{dialog.width}s\e[49m" % Reline::Unicode.take_range(item, 0, dialog.width)
616
656
  Reline::IOGate.move_cursor_column(dialog.column)
617
657
  move_cursor_down(1) if i < (dialog.contents.size - 1)
618
658
  end
@@ -628,8 +668,8 @@ class Reline::LineEditor
628
668
  }
629
669
  end
630
670
 
631
- private def reset_dialog(dialog, old_dialog_contents, old_dialog_column, old_dialog_vertical_offset)
632
- return if dialog.lines_backup.nil? or old_dialog_contents.nil?
671
+ private def reset_dialog(dialog, old_dialog)
672
+ return if dialog.lines_backup.nil? or old_dialog.contents.nil?
633
673
  prompt, prompt_width, prompt_list = check_multiline_prompt(dialog.lines_backup[:lines], prompt)
634
674
  visual_lines = []
635
675
  visual_start = nil
@@ -645,76 +685,76 @@ class Reline::LineEditor
645
685
  old_y = dialog.lines_backup[:first_line_started_from] + dialog.lines_backup[:started_from]
646
686
  y = @first_line_started_from + @started_from
647
687
  y_diff = y - old_y
648
- if (old_y + old_dialog_vertical_offset) < (y + dialog.vertical_offset)
688
+ if (old_y + old_dialog.vertical_offset) < (y + dialog.vertical_offset)
649
689
  # rerender top
650
- move_cursor_down(old_dialog_vertical_offset - y_diff)
651
- start = visual_start + old_dialog_vertical_offset
652
- line_num = dialog.vertical_offset - old_dialog_vertical_offset
690
+ move_cursor_down(old_dialog.vertical_offset - y_diff)
691
+ start = visual_start + old_dialog.vertical_offset
692
+ line_num = dialog.vertical_offset - old_dialog.vertical_offset
653
693
  line_num.times do |i|
654
- Reline::IOGate.move_cursor_column(old_dialog_column)
694
+ Reline::IOGate.move_cursor_column(old_dialog.column)
655
695
  if visual_lines[start + i].nil?
656
- s = ' ' * DIALOG_WIDTH
696
+ s = ' ' * dialog.width
657
697
  else
658
- s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog_column, DIALOG_WIDTH)
698
+ s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog.column, dialog.width)
659
699
  end
660
- @output.write "\e[39m\e[49m%-#{DIALOG_WIDTH}s\e[39m\e[49m" % s
700
+ @output.write "\e[39m\e[49m%-#{dialog.width}s\e[39m\e[49m" % s
661
701
  move_cursor_down(1) if i < (line_num - 1)
662
702
  end
663
- move_cursor_up(old_dialog_vertical_offset + line_num - 1 - y_diff)
703
+ move_cursor_up(old_dialog.vertical_offset + line_num - 1 - y_diff)
664
704
  end
665
- if (old_y + old_dialog_vertical_offset + old_dialog_contents.size) > (y + dialog.vertical_offset + dialog.contents.size)
705
+ if (old_y + old_dialog.vertical_offset + old_dialog.contents.size) > (y + dialog.vertical_offset + dialog.contents.size)
666
706
  # rerender bottom
667
707
  move_cursor_down(dialog.vertical_offset + dialog.contents.size - y_diff)
668
708
  start = visual_start + dialog.vertical_offset + dialog.contents.size
669
- line_num = (old_dialog_vertical_offset + old_dialog_contents.size) - (dialog.vertical_offset + dialog.contents.size)
709
+ line_num = (old_dialog.vertical_offset + old_dialog.contents.size) - (dialog.vertical_offset + dialog.contents.size)
670
710
  line_num.times do |i|
671
- Reline::IOGate.move_cursor_column(old_dialog_column)
711
+ Reline::IOGate.move_cursor_column(old_dialog.column)
672
712
  if visual_lines[start + i].nil?
673
- s = ' ' * DIALOG_WIDTH
713
+ s = ' ' * dialog.width
674
714
  else
675
- s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog_column, DIALOG_WIDTH)
715
+ s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog.column, dialog.width)
676
716
  end
677
- @output.write "\e[39m\e[49m%-#{DIALOG_WIDTH}s\e[39m\e[49m" % s
717
+ @output.write "\e[39m\e[49m%-#{dialog.width}s\e[39m\e[49m" % s
678
718
  move_cursor_down(1) if i < (line_num - 1)
679
719
  end
680
720
  move_cursor_up(dialog.vertical_offset + dialog.contents.size + line_num - 1 - y_diff)
681
721
  end
682
- if old_dialog_column < dialog.column
722
+ if old_dialog.column < dialog.column
683
723
  # rerender left
684
- move_cursor_down(old_dialog_vertical_offset - y_diff)
685
- width = dialog.column - old_dialog_column
686
- start = visual_start + old_dialog_vertical_offset
687
- line_num = old_dialog_contents.size
724
+ move_cursor_down(old_dialog.vertical_offset - y_diff)
725
+ width = dialog.column - old_dialog.column
726
+ start = visual_start + old_dialog.vertical_offset
727
+ line_num = old_dialog.contents.size
688
728
  line_num.times do |i|
689
- Reline::IOGate.move_cursor_column(old_dialog_column)
729
+ Reline::IOGate.move_cursor_column(old_dialog.column)
690
730
  if visual_lines[start + i].nil?
691
731
  s = ' ' * width
692
732
  else
693
- s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog_column, width)
733
+ s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog.column, width)
694
734
  end
695
735
  @output.write "\e[39m\e[49m%-#{width}s\e[39m\e[49m" % s
696
736
  move_cursor_down(1) if i < (line_num - 1)
697
737
  end
698
- move_cursor_up(old_dialog_vertical_offset + line_num - 1 - y_diff)
738
+ move_cursor_up(old_dialog.vertical_offset + line_num - 1 - y_diff)
699
739
  end
700
- if (old_dialog_column + DIALOG_WIDTH) > (dialog.column + DIALOG_WIDTH)
740
+ if (old_dialog.column + old_dialog.width) > (dialog.column + dialog.width)
701
741
  # rerender right
702
- move_cursor_down(old_dialog_vertical_offset + y_diff)
703
- width = (old_dialog_column + DIALOG_WIDTH) - (dialog.column + DIALOG_WIDTH)
704
- start = visual_start + old_dialog_vertical_offset
705
- line_num = old_dialog_contents.size
742
+ move_cursor_down(old_dialog.vertical_offset + y_diff)
743
+ width = (old_dialog.column + old_dialog.width) - (dialog.column + dialog.width)
744
+ start = visual_start + old_dialog.vertical_offset
745
+ line_num = old_dialog.contents.size
706
746
  line_num.times do |i|
707
- Reline::IOGate.move_cursor_column(old_dialog_column + DIALOG_WIDTH)
747
+ Reline::IOGate.move_cursor_column(old_dialog.column + dialog.width)
708
748
  if visual_lines[start + i].nil?
709
749
  s = ' ' * width
710
750
  else
711
- s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog_column + DIALOG_WIDTH, width)
751
+ s = Reline::Unicode.take_range(visual_lines[start + i], old_dialog.column + dialog.width, width)
712
752
  end
713
- Reline::IOGate.move_cursor_column(dialog.column + DIALOG_WIDTH)
753
+ Reline::IOGate.move_cursor_column(dialog.column + dialog.width)
714
754
  @output.write "\e[39m\e[49m%-#{width}s\e[39m\e[49m" % s
715
755
  move_cursor_down(1) if i < (line_num - 1)
716
756
  end
717
- move_cursor_up(old_dialog_vertical_offset + line_num - 1 + y_diff)
757
+ move_cursor_up(old_dialog.vertical_offset + line_num - 1 + y_diff)
718
758
  end
719
759
  Reline::IOGate.move_cursor_column((prompt_width + @cursor) % @screen_size.last)
720
760
  end
@@ -748,10 +788,10 @@ class Reline::LineEditor
748
788
  dialog_vertical_size.times do |i|
749
789
  if i < visual_lines_under_dialog.size
750
790
  Reline::IOGate.move_cursor_column(0)
751
- @output.write "\e[39m\e[49m%-#{DIALOG_WIDTH}s\e[39m\e[49m" % visual_lines_under_dialog[i]
791
+ @output.write "\e[39m\e[49m%-#{dialog.width}s\e[39m\e[49m" % visual_lines_under_dialog[i]
752
792
  else
753
793
  Reline::IOGate.move_cursor_column(dialog.column)
754
- @output.write "\e[39m\e[49m#{' ' * DIALOG_WIDTH}\e[39m\e[49m"
794
+ @output.write "\e[39m\e[49m#{' ' * dialog.width}\e[39m\e[49m"
755
795
  end
756
796
  Reline::IOGate.erase_after_cursor
757
797
  move_cursor_down(1) if i < (dialog_vertical_size - 1)
@@ -1426,7 +1466,20 @@ class Reline::LineEditor
1426
1466
  if result.is_a?(Array)
1427
1467
  completion_occurs = true
1428
1468
  process_insert
1429
- complete(result)
1469
+ if @config.autocompletion
1470
+ move_completed_list(result, :down)
1471
+ else
1472
+ complete(result)
1473
+ end
1474
+ end
1475
+ end
1476
+ elsif @config.editing_mode_is?(:emacs, :vi_insert) and key.char == :completion_journey_up
1477
+ if not @config.disable_completion and @config.autocompletion
1478
+ result = call_completion_proc
1479
+ if result.is_a?(Array)
1480
+ completion_occurs = true
1481
+ process_insert
1482
+ move_completed_list(result, :up)
1430
1483
  end
1431
1484
  end
1432
1485
  elsif not @config.disable_completion and @config.editing_mode_is?(:vi_insert) and ["\C-p".ord, "\C-n".ord].include?(key.char)
@@ -186,9 +186,9 @@ class Reline::Unicode
186
186
  end
187
187
 
188
188
  # Take a chunk of a String with escape sequences.
189
- def self.take_range(str, col, length, encoding = str.encoding)
189
+ def self.take_range(str, start_col, max_width, encoding = str.encoding)
190
190
  chunk = String.new(encoding: encoding)
191
- width = 0
191
+ total_width = 0
192
192
  rest = str.encode(Encoding::UTF_8)
193
193
  in_zero_width = false
194
194
  rest.scan(WIDTH_SCANNER) do |gc|
@@ -206,9 +206,10 @@ class Reline::Unicode
206
206
  if in_zero_width
207
207
  chunk << gc
208
208
  else
209
- width = get_mbchar_width(gc)
210
- break if (width + length) <= col
211
- chunk << gc if col <= width
209
+ mbchar_width = get_mbchar_width(gc)
210
+ total_width += mbchar_width
211
+ break if (start_col + max_width) < total_width
212
+ chunk << gc if start_col < total_width
212
213
  end
213
214
  end
214
215
  end
@@ -1,3 +1,3 @@
1
1
  module Reline
2
- VERSION = '0.2.8.pre.1'
2
+ VERSION = '0.2.8.pre.5'
3
3
  end
@@ -42,6 +42,14 @@ class Reline::Windows
42
42
  }.each_pair do |key, func|
43
43
  config.add_default_key_binding_by_keymap(:emacs, key, func)
44
44
  end
45
+
46
+ # Emulate ANSI key sequence.
47
+ {
48
+ [27, 91, 90] => :completion_journey_up, # S-Tab
49
+ }.each_pair do |key, func|
50
+ config.add_default_key_binding_by_keymap(:emacs, key, func)
51
+ config.add_default_key_binding_by_keymap(:vi_insert, key, func)
52
+ end
45
53
  end
46
54
 
47
55
  if defined? JRUBY_VERSION
@@ -106,6 +114,7 @@ class Reline::Windows
106
114
  SCROLLLOCK_ON = 0x0040
107
115
  SHIFT_PRESSED = 0x0010
108
116
 
117
+ VK_TAB = 0x09
109
118
  VK_END = 0x23
110
119
  VK_HOME = 0x24
111
120
  VK_LEFT = 0x25
@@ -199,6 +208,9 @@ class Reline::Windows
199
208
  [ { control_keys: [], virtual_key_code: VK_DELETE }, [0, 83] ],
200
209
  [ { control_keys: [], virtual_key_code: VK_HOME }, [0, 71] ],
201
210
  [ { control_keys: [], virtual_key_code: VK_END }, [0, 79] ],
211
+
212
+ # Emulate ANSI key sequence.
213
+ [ { control_keys: :SHIFT, virtual_key_code: VK_TAB }, [27, 91, 90] ],
202
214
  ]
203
215
 
204
216
  def self.process_key_event(repeat_count, virtual_key_code, virtual_scan_code, char_code, control_key_state)
data/lib/reline.rb CHANGED
@@ -18,6 +18,7 @@ module Reline
18
18
 
19
19
  Key = Struct.new('Key', :char, :combined_char, :with_meta)
20
20
  CursorPos = Struct.new(:x, :y)
21
+ DialogRenderInfo = Struct.new(:pos, :contents, :pointer, :bg_color, :width, :height, keyword_init: true)
21
22
 
22
23
  class Core
23
24
  ATTR_READER_NAMES = %i(
@@ -107,6 +108,14 @@ module Reline
107
108
  @completion_proc = p
108
109
  end
109
110
 
111
+ def autocompletion
112
+ @config.autocompletion
113
+ end
114
+
115
+ def autocompletion=(val)
116
+ @config.autocompletion = val
117
+ end
118
+
110
119
  def output_modifier_proc=(p)
111
120
  raise ArgumentError unless p.respond_to?(:call) or p.nil?
112
121
  @output_modifier_proc = p
@@ -180,6 +189,7 @@ module Reline
180
189
 
181
190
  Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE = ->() {
182
191
  # autocomplete
192
+ return nil unless config.autocompletion
183
193
  if just_cursor_moving and completion_journey_data.nil?
184
194
  # Auto complete starts only when edited
185
195
  return nil
@@ -210,9 +220,9 @@ module Reline
210
220
  cursor_pos_to_render = Reline::CursorPos.new(x, y)
211
221
  if context and context.is_a?(Array)
212
222
  context.clear
213
- context.push(cursor_pos_to_render, result, pointer)
223
+ context.push(cursor_pos_to_render, result, pointer, dialog)
214
224
  end
215
- [cursor_pos_to_render, result, pointer, nil]
225
+ DialogRenderInfo.new(pos: cursor_pos_to_render, contents: result, pointer: pointer, height: 15)
216
226
  }
217
227
  Reline::DEFAULT_DIALOG_CONTEXT = Array.new
218
228
 
@@ -474,6 +484,7 @@ module Reline
474
484
  def_single_delegators :core, :last_incremental_search
475
485
  def_single_delegators :core, :last_incremental_search=
476
486
  def_single_delegators :core, :add_dialog_proc
487
+ def_single_delegators :core, :autocompletion, :autocompletion=
477
488
 
478
489
  def_single_delegators :core, :readmultiline
479
490
  def_instance_delegators self, :readmultiline
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.1
4
+ version: 0.2.8.pre.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - aycabta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-29 00:00:00.000000000 Z
11
+ date: 2021-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: io-console