[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)
|
@continuous_insertion_buffer = String.new(encoding: @encoding)
|
||||||
@scroll_partial_screen = nil
|
@scroll_partial_screen = nil
|
||||||
@prev_mode_icon = nil
|
@prev_mode_icon = nil
|
||||||
|
@drop_terminate_spaces = false
|
||||||
reset_line
|
reset_line
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2188,7 +2189,7 @@ class Reline::LineEditor
|
|||||||
|
|
||||||
private def vi_next_word(key, arg: 1)
|
private def vi_next_word(key, arg: 1)
|
||||||
if @line.bytesize > @byte_pointer
|
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
|
@byte_pointer += byte_size
|
||||||
@cursor += width
|
@cursor += width
|
||||||
end
|
end
|
||||||
@ -2316,6 +2317,7 @@ class Reline::LineEditor
|
|||||||
end
|
end
|
||||||
|
|
||||||
private def vi_change_meta(key, arg: 1)
|
private def vi_change_meta(key, arg: 1)
|
||||||
|
@drop_terminate_spaces = true
|
||||||
@waiting_operator_proc = proc { |cursor_diff, byte_pointer_diff|
|
@waiting_operator_proc = proc { |cursor_diff, byte_pointer_diff|
|
||||||
if byte_pointer_diff > 0
|
if byte_pointer_diff > 0
|
||||||
@line, cut = byteslice!(@line, @byte_pointer, byte_pointer_diff)
|
@line, cut = byteslice!(@line, @byte_pointer, byte_pointer_diff)
|
||||||
@ -2327,6 +2329,7 @@ class Reline::LineEditor
|
|||||||
@cursor_max -= cursor_diff.abs
|
@cursor_max -= cursor_diff.abs
|
||||||
@byte_pointer += byte_pointer_diff if byte_pointer_diff < 0
|
@byte_pointer += byte_pointer_diff if byte_pointer_diff < 0
|
||||||
@config.editing_mode = :vi_insert
|
@config.editing_mode = :vi_insert
|
||||||
|
@drop_terminate_spaces = false
|
||||||
}
|
}
|
||||||
@waiting_operator_vi_arg = arg
|
@waiting_operator_vi_arg = arg
|
||||||
end
|
end
|
||||||
|
@ -458,7 +458,7 @@ class Reline::Unicode
|
|||||||
[byte_size, width]
|
[byte_size, width]
|
||||||
end
|
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
|
if line.bytesize > byte_pointer
|
||||||
size = get_next_mbchar_size(line, byte_pointer)
|
size = get_next_mbchar_size(line, byte_pointer)
|
||||||
mbchar = line.byteslice(byte_pointer, size)
|
mbchar = line.byteslice(byte_pointer, size)
|
||||||
@ -488,6 +488,7 @@ class Reline::Unicode
|
|||||||
width += get_mbchar_width(mbchar)
|
width += get_mbchar_width(mbchar)
|
||||||
byte_size += size
|
byte_size += size
|
||||||
end
|
end
|
||||||
|
return [byte_size, width] if drop_terminate_spaces
|
||||||
while line.bytesize > (byte_pointer + byte_size)
|
while line.bytesize > (byte_pointer + byte_size)
|
||||||
size = get_next_mbchar_size(line, byte_pointer + byte_size)
|
size = get_next_mbchar_size(line, byte_pointer + byte_size)
|
||||||
mbchar = line.byteslice(byte_pointer + byte_size, 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(8)
|
||||||
assert_cursor_max(19)
|
assert_cursor_max(19)
|
||||||
assert_line('aaa bbb ccc ddd eee')
|
assert_line('aaa bbb ccc ddd eee')
|
||||||
input_keys('cwaiueo ')
|
input_keys('cwaiueo')
|
||||||
assert_byte_pointer_size('aaa bbb aiueo ')
|
assert_byte_pointer_size('aaa bbb aiueo')
|
||||||
assert_cursor(14)
|
assert_cursor(13)
|
||||||
assert_cursor_max(21)
|
assert_cursor_max(21)
|
||||||
assert_line('aaa bbb aiueo ddd eee')
|
assert_line('aaa bbb aiueo ddd eee')
|
||||||
input_keys("\C-[")
|
input_keys("\C-[")
|
||||||
assert_byte_pointer_size('aaa bbb aiueo')
|
assert_byte_pointer_size('aaa bbb aiue')
|
||||||
assert_cursor(13)
|
assert_cursor(12)
|
||||||
assert_cursor_max(21)
|
assert_cursor_max(21)
|
||||||
assert_line('aaa bbb aiueo ddd eee')
|
assert_line('aaa bbb aiueo ddd eee')
|
||||||
input_keys('cb')
|
input_keys('cb')
|
||||||
assert_byte_pointer_size('aaa bbb ')
|
assert_byte_pointer_size('aaa bbb ')
|
||||||
assert_cursor(8)
|
assert_cursor(8)
|
||||||
assert_cursor_max(16)
|
assert_cursor_max(17)
|
||||||
assert_line('aaa bbb ddd eee')
|
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
|
end
|
||||||
|
|
||||||
def test_unimplemented_vi_command_should_be_no_op
|
def test_unimplemented_vi_command_should_be_no_op
|
||||||
|
Loading…
x
Reference in New Issue
Block a user