summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2022-01-13 20:29:07 +0900
committergit <svn-admin@ruby-lang.org>2022-01-16 22:09:31 +0900
commitf5e3913737916df3bc569dee7d3c9c9ed98146b3 (patch)
tree3386aa6d879aa3d79917c97b61e61ee027676d31
parent921ff739df14c705491d75435c5e5ce31e2ed553 (diff)
[ruby/reline] Fix incremental search to work correctly even if not last line
https://github.com/ruby/reline/commit/21d75f6d4c
-rw-r--r--lib/reline/line_editor.rb2
-rw-r--r--test/reline/yamatanooroti/test_rendering.rb23
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index 82bd36d4b3..135432a5d1 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -2233,6 +2233,8 @@ class Reline::LineEditor
@buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty?
@line_index = @buffer_of_lines.size - 1
@line = @buffer_of_lines.last
+ @byte_pointer = @line.bytesize
+ @cursor = @cursor_max = calculate_width(@line)
@rerender_all = true
@searching_prompt = "(%s)`%s'" % [prompt_name, search_word]
else
diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb
index 4da61c2041..c383112131 100644
--- a/test/reline/yamatanooroti/test_rendering.rb
+++ b/test/reline/yamatanooroti/test_rendering.rb
@@ -1310,6 +1310,29 @@ begin
EOC
end
+ def test_incremental_search_on_not_last_line
+ start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
+ write("def abc\nend\n")
+ write("def def\nend\n")
+ write("\C-p\C-p\C-e")
+ write("\C-r")
+ write("a")
+ write("\n\n")
+ close
+ assert_screen(<<~'EOC')
+ prompt> def abc
+ prompt> end
+ => :abc
+ prompt> def def
+ prompt> end
+ => :def
+ prompt> def abc
+ prompt> end
+ => :abc
+ prompt>
+ EOC
+ end
+
def write_inputrc(content)
File.open(@inputrc_file, 'w') do |f|
f.write content