mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/reline] Handle ed_search_{prev,next}_history in multiline correctly
The current line was being handled incorrectly when displaying the hit
history, so it has been fixed to be correct.
a3df4343b3
This commit is contained in:
parent
9fa478e38a
commit
44817db28b
3 changed files with 63 additions and 2 deletions
|
@ -1732,7 +1732,7 @@ class Reline::LineEditor
|
||||||
@buffer_of_lines = Reline::HISTORY[@history_pointer].split("\n")
|
@buffer_of_lines = Reline::HISTORY[@history_pointer].split("\n")
|
||||||
@buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty?
|
@buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty?
|
||||||
@line_index = line_no
|
@line_index = line_no
|
||||||
@line = @buffer_of_lines.last
|
@line = @buffer_of_lines[@line_index]
|
||||||
@rerender_all = true
|
@rerender_all = true
|
||||||
else
|
else
|
||||||
@line = Reline::HISTORY[@history_pointer]
|
@line = Reline::HISTORY[@history_pointer]
|
||||||
|
@ -1780,7 +1780,7 @@ class Reline::LineEditor
|
||||||
@line_index = line_no
|
@line_index = line_no
|
||||||
end
|
end
|
||||||
@buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty?
|
@buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty?
|
||||||
@line = @buffer_of_lines.last
|
@line = @buffer_of_lines[@line_index]
|
||||||
@rerender_all = true
|
@rerender_all = true
|
||||||
else
|
else
|
||||||
if @history_pointer.nil? and substr.empty?
|
if @history_pointer.nil? and substr.empty?
|
||||||
|
|
|
@ -96,4 +96,18 @@ class Reline::TestCase < Test::Unit::TestCase
|
||||||
def assert_cursor_max(expected)
|
def assert_cursor_max(expected)
|
||||||
assert_equal(expected, @line_editor.instance_variable_get(:@cursor_max))
|
assert_equal(expected, @line_editor.instance_variable_get(:@cursor_max))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def assert_line_index(expected)
|
||||||
|
assert_equal(expected, @line_editor.instance_variable_get(:@line_index))
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_whole_lines(expected)
|
||||||
|
previous_line_index = @line_editor.instance_variable_get(:@previous_line_index)
|
||||||
|
if previous_line_index
|
||||||
|
lines = @line_editor.whole_lines(index: previous_line_index)
|
||||||
|
else
|
||||||
|
lines = @line_editor.whole_lines
|
||||||
|
end
|
||||||
|
assert_equal(expected, lines)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2233,6 +2233,53 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
|
||||||
assert_line('def hoge')
|
assert_line('def hoge')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_ed_search_prev_next_history_in_multibyte
|
||||||
|
Reline::HISTORY.concat([
|
||||||
|
"def hoge\n 67890\n 12345\nend", # old
|
||||||
|
"def aiu\n 0xDEADBEEF\nend",
|
||||||
|
"def foo\n 12345\nend" # new
|
||||||
|
])
|
||||||
|
@line_editor.multiline_on
|
||||||
|
input_keys(' 123')
|
||||||
|
# The ed_search_prev_history doesn't have default binding
|
||||||
|
@line_editor.__send__(:ed_search_prev_history, "\C-p".ord)
|
||||||
|
assert_whole_lines(['def foo', ' 12345', 'end'])
|
||||||
|
assert_line_index(1)
|
||||||
|
assert_whole_lines(['def foo', ' 12345', 'end'])
|
||||||
|
assert_byte_pointer_size(' 123')
|
||||||
|
assert_cursor(5)
|
||||||
|
assert_cursor_max(7)
|
||||||
|
assert_line(' 12345')
|
||||||
|
@line_editor.__send__(:ed_search_prev_history, "\C-p".ord)
|
||||||
|
assert_line_index(2)
|
||||||
|
assert_whole_lines(['def hoge', ' 67890', ' 12345', 'end'])
|
||||||
|
assert_byte_pointer_size(' 123')
|
||||||
|
assert_cursor(5)
|
||||||
|
assert_cursor_max(7)
|
||||||
|
assert_line(' 12345')
|
||||||
|
@line_editor.__send__(:ed_search_prev_history, "\C-p".ord)
|
||||||
|
assert_line_index(2)
|
||||||
|
assert_whole_lines(['def hoge', ' 67890', ' 12345', 'end'])
|
||||||
|
assert_byte_pointer_size(' 123')
|
||||||
|
assert_cursor(5)
|
||||||
|
assert_cursor_max(7)
|
||||||
|
assert_line(' 12345')
|
||||||
|
@line_editor.__send__(:ed_search_next_history, "\C-n".ord)
|
||||||
|
assert_line_index(1)
|
||||||
|
assert_whole_lines(['def foo', ' 12345', 'end'])
|
||||||
|
assert_byte_pointer_size(' 123')
|
||||||
|
assert_cursor(5)
|
||||||
|
assert_cursor_max(7)
|
||||||
|
assert_line(' 12345')
|
||||||
|
@line_editor.__send__(:ed_search_next_history, "\C-n".ord)
|
||||||
|
assert_line_index(1)
|
||||||
|
assert_whole_lines(['def foo', ' 12345', 'end'])
|
||||||
|
assert_byte_pointer_size(' 123')
|
||||||
|
assert_cursor(5)
|
||||||
|
assert_cursor_max(7)
|
||||||
|
assert_line(' 12345')
|
||||||
|
end
|
||||||
|
|
||||||
=begin # TODO: move KeyStroke instance from Reline to LineEditor
|
=begin # TODO: move KeyStroke instance from Reline to LineEditor
|
||||||
def test_key_delete
|
def test_key_delete
|
||||||
input_keys('ab')
|
input_keys('ab')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue