[ruby/reline] Doesn't contain terminate spaces by cw
This closes ruby/reline#233. https://github.com/ruby/reline/commit/4c3f2e2eae
This commit is contained in:
parent
78421319d0
commit
9a7647d9eb
@ -219,6 +219,7 @@ class Reline::LineEditor
|
||||
@continuous_insertion_buffer = String.new(encoding: @encoding)
|
||||
@scroll_partial_screen = nil
|
||||
@prev_mode_icon = nil
|
||||
@drop_terminate_spaces = false
|
||||
reset_line
|
||||
end
|
||||
|
||||
@ -2188,7 +2189,7 @@ class Reline::LineEditor
|
||||
|
||||
private def vi_next_word(key, arg: 1)
|
||||
if @line.bytesize > @byte_pointer
|
||||
byte_size, width = Reline::Unicode.vi_forward_word(@line, @byte_pointer)
|
||||
byte_size, width = Reline::Unicode.vi_forward_word(@line, @byte_pointer, @drop_terminate_spaces)
|
||||
@byte_pointer += byte_size
|
||||
@cursor += width
|
||||
end
|
||||
@ -2316,6 +2317,7 @@ class Reline::LineEditor
|
||||
end
|
||||
|
||||
private def vi_change_meta(key, arg: 1)
|
||||
@drop_terminate_spaces = true
|
||||
@waiting_operator_proc = proc { |cursor_diff, byte_pointer_diff|
|
||||
if byte_pointer_diff > 0
|
||||
@line, cut = byteslice!(@line, @byte_pointer, byte_pointer_diff)
|
||||
@ -2327,6 +2329,7 @@ class Reline::LineEditor
|
||||
@cursor_max -= cursor_diff.abs
|
||||
@byte_pointer += byte_pointer_diff if byte_pointer_diff < 0
|
||||
@config.editing_mode = :vi_insert
|
||||
@drop_terminate_spaces = false
|
||||
}
|
||||
@waiting_operator_vi_arg = arg
|
||||
end
|
||||
|
@ -458,7 +458,7 @@ class Reline::Unicode
|
||||
[byte_size, width]
|
||||
end
|
||||
|
||||
def self.vi_forward_word(line, byte_pointer)
|
||||
def self.vi_forward_word(line, byte_pointer, drop_terminate_spaces = false)
|
||||
if line.bytesize > byte_pointer
|
||||
size = get_next_mbchar_size(line, byte_pointer)
|
||||
mbchar = line.byteslice(byte_pointer, size)
|
||||
@ -488,6 +488,7 @@ class Reline::Unicode
|
||||
width += get_mbchar_width(mbchar)
|
||||
byte_size += size
|
||||
end
|
||||
return [byte_size, width] if drop_terminate_spaces
|
||||
while line.bytesize > (byte_pointer + byte_size)
|
||||
size = get_next_mbchar_size(line, byte_pointer + byte_size)
|
||||
mbchar = line.byteslice(byte_pointer + byte_size, size)
|
||||
|
@ -1288,21 +1288,39 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
|
||||
assert_cursor(8)
|
||||
assert_cursor_max(19)
|
||||
assert_line('aaa bbb ccc ddd eee')
|
||||
input_keys('cwaiueo ')
|
||||
assert_byte_pointer_size('aaa bbb aiueo ')
|
||||
assert_cursor(14)
|
||||
input_keys('cwaiueo')
|
||||
assert_byte_pointer_size('aaa bbb aiueo')
|
||||
assert_cursor(13)
|
||||
assert_cursor_max(21)
|
||||
assert_line('aaa bbb aiueo ddd eee')
|
||||
input_keys("\C-[")
|
||||
assert_byte_pointer_size('aaa bbb aiueo')
|
||||
assert_cursor(13)
|
||||
assert_byte_pointer_size('aaa bbb aiue')
|
||||
assert_cursor(12)
|
||||
assert_cursor_max(21)
|
||||
assert_line('aaa bbb aiueo ddd eee')
|
||||
input_keys('cb')
|
||||
assert_byte_pointer_size('aaa bbb ')
|
||||
assert_cursor(8)
|
||||
assert_cursor_max(16)
|
||||
assert_line('aaa bbb ddd eee')
|
||||
assert_cursor_max(17)
|
||||
assert_line('aaa bbb o ddd eee')
|
||||
end
|
||||
|
||||
def test_vi_change_meta_with_vi_next_word
|
||||
input_keys("foo bar baz\C-[0w")
|
||||
assert_byte_pointer_size('foo ')
|
||||
assert_cursor(5)
|
||||
assert_cursor_max(13)
|
||||
assert_line('foo bar baz')
|
||||
input_keys('cwhoge')
|
||||
assert_byte_pointer_size('foo hoge')
|
||||
assert_cursor(9)
|
||||
assert_cursor_max(14)
|
||||
assert_line('foo hoge baz')
|
||||
input_keys("\C-[")
|
||||
assert_byte_pointer_size('foo hog')
|
||||
assert_cursor(8)
|
||||
assert_cursor_max(14)
|
||||
assert_line('foo hoge baz')
|
||||
end
|
||||
|
||||
def test_unimplemented_vi_command_should_be_no_op
|
||||
|
Loading…
x
Reference in New Issue
Block a user