mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
parent
9f99760daf
commit
b17797a694
2 changed files with 30 additions and 2 deletions
|
@ -2087,12 +2087,17 @@ class Reline::LineEditor
|
||||||
@waiting_proc = ->(key_for_proc) { search_next_char(key_for_proc, arg) }
|
@waiting_proc = ->(key_for_proc) { search_next_char(key_for_proc, arg) }
|
||||||
end
|
end
|
||||||
|
|
||||||
private def search_next_char(key, arg)
|
private def vi_to_next_char(key, arg: 1)
|
||||||
|
@waiting_proc = ->(key_for_proc) { search_next_char(key_for_proc, arg, true) }
|
||||||
|
end
|
||||||
|
|
||||||
|
private def search_next_char(key, arg, need_prev_char = false)
|
||||||
if key.instance_of?(String)
|
if key.instance_of?(String)
|
||||||
inputed_char = key
|
inputed_char = key
|
||||||
else
|
else
|
||||||
inputed_char = key.chr
|
inputed_char = key.chr
|
||||||
end
|
end
|
||||||
|
prev_total = nil
|
||||||
total = nil
|
total = nil
|
||||||
found = false
|
found = false
|
||||||
@line.byteslice(@byte_pointer..-1).grapheme_clusters.each do |mbchar|
|
@line.byteslice(@byte_pointer..-1).grapheme_clusters.each do |mbchar|
|
||||||
|
@ -2110,13 +2115,18 @@ class Reline::LineEditor
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
width = Reline::Unicode.get_mbchar_width(mbchar)
|
width = Reline::Unicode.get_mbchar_width(mbchar)
|
||||||
|
prev_total = total
|
||||||
total = [total.first + mbchar.bytesize, total.last + width]
|
total = [total.first + mbchar.bytesize, total.last + width]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if found and total
|
if not need_prev_char and found and total
|
||||||
byte_size, width = total
|
byte_size, width = total
|
||||||
@byte_pointer += byte_size
|
@byte_pointer += byte_size
|
||||||
@cursor += width
|
@cursor += width
|
||||||
|
elsif need_prev_char and found and prev_total
|
||||||
|
byte_size, width = prev_total
|
||||||
|
@byte_pointer += byte_size
|
||||||
|
@cursor += width
|
||||||
end
|
end
|
||||||
@waiting_proc = nil
|
@waiting_proc = nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -633,6 +633,24 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
|
||||||
assert_cursor_max(6)
|
assert_cursor_max(6)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_vi_to_next_char
|
||||||
|
input_keys("abcdef\C-[0")
|
||||||
|
assert_line('abcdef')
|
||||||
|
assert_byte_pointer_size('')
|
||||||
|
assert_cursor(0)
|
||||||
|
assert_cursor_max(6)
|
||||||
|
input_keys('tz')
|
||||||
|
assert_line('abcdef')
|
||||||
|
assert_byte_pointer_size('')
|
||||||
|
assert_cursor(0)
|
||||||
|
assert_cursor_max(6)
|
||||||
|
input_keys('te')
|
||||||
|
assert_line('abcdef')
|
||||||
|
assert_byte_pointer_size('abc')
|
||||||
|
assert_cursor(3)
|
||||||
|
assert_cursor_max(6)
|
||||||
|
end
|
||||||
|
|
||||||
def test_vi_delete_next_char
|
def test_vi_delete_next_char
|
||||||
input_keys("abc\C-[h")
|
input_keys("abc\C-[h")
|
||||||
assert_byte_pointer_size('a')
|
assert_byte_pointer_size('a')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue