diff options
-rw-r--r-- | lib/reline/line_editor.rb | 4 | ||||
-rwxr-xr-x | test/reline/yamatanooroti/multiline_repl | 5 | ||||
-rw-r--r-- | test/reline/yamatanooroti/test_rendering.rb | 14 |
3 files changed, 21 insertions, 2 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 3b3fc23080..9442bdf5cc 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -1295,8 +1295,8 @@ class Reline::LineEditor end end completed = @completion_journey_data.list[@completion_journey_data.pointer] - @line = @completion_journey_data.preposing + completed + @completion_journey_data.postposing - line_to_pointer = @completion_journey_data.preposing + completed + @line = (@completion_journey_data.preposing + completed + @completion_journey_data.postposing).split("\n")[@line_index] + line_to_pointer = (@completion_journey_data.preposing + completed).split("\n").last @cursor_max = calculate_width(@line) @cursor = calculate_width(line_to_pointer) @byte_pointer = line_to_pointer.bytesize diff --git a/test/reline/yamatanooroti/multiline_repl b/test/reline/yamatanooroti/multiline_repl index f2efdd4eaf..00d4825ee3 100755 --- a/test/reline/yamatanooroti/multiline_repl +++ b/test/reline/yamatanooroti/multiline_repl @@ -30,6 +30,11 @@ opt.on('--dynamic-prompt-returns-empty') { opt.on('--auto-indent') { AutoIndent.new } +opt.on('--complete') { + Reline.completion_proc = lambda { |target, preposing = nil, postposing = nil| + %w{String ScriptError SyntaxError Signal} + } +} opt.parse!(ARGV) begin diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index b17e8bbb01..0ea5b1a25d 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -809,6 +809,20 @@ begin EOC end + def test_completion_journey_2nd_line + write_inputrc <<~LINES + set editing-mode vi + LINES + start_terminal(10, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete}, startup_message: 'Multiline REPL.') + write("def hoge\n S\C-n") + close + assert_screen(<<~'EOC') + Multiline REPL. + prompt> def hoge + prompt> String + EOC + end + def write_inputrc(content) File.open(@inputrc_file, 'w') do |f| f.write content |