1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/reline] Delete the last char of a line by dw

This closes ruby/reline#229.

https://github.com/ruby/reline/commit/3f0ae689c4
This commit is contained in:
aycabta 2020-12-24 21:24:35 +09:00
parent 8d5d139afa
commit 0db9842b2c
2 changed files with 26 additions and 3 deletions

View file

@ -459,7 +459,7 @@ class Reline::Unicode
end
def self.vi_forward_word(line, byte_pointer)
if (line.bytesize - 1) > byte_pointer
if line.bytesize > byte_pointer
size = get_next_mbchar_size(line, byte_pointer)
mbchar = line.byteslice(byte_pointer, size)
if mbchar =~ /\w/
@ -474,7 +474,7 @@ class Reline::Unicode
else
return [0, 0]
end
while (line.bytesize - 1) > (byte_pointer + byte_size)
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)
case started_by
@ -488,7 +488,7 @@ class Reline::Unicode
width += get_mbchar_width(mbchar)
byte_size += size
end
while (line.bytesize - 1) > (byte_pointer + byte_size)
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)
break if mbchar =~ /\S/

View file

@ -1215,6 +1215,29 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
assert_line('aaa ddd eee')
end
def test_vi_delete_meta_with_vi_next_word_at_eol
input_keys("foo bar\C-[0w")
assert_byte_pointer_size('foo ')
assert_cursor(4)
assert_cursor_max(7)
assert_line('foo bar')
input_keys('w')
assert_byte_pointer_size('foo ba')
assert_cursor(6)
assert_cursor_max(7)
assert_line('foo bar')
input_keys('0dw')
assert_byte_pointer_size('')
assert_cursor(0)
assert_cursor_max(3)
assert_line('bar')
input_keys('dw')
assert_byte_pointer_size('')
assert_cursor(0)
assert_cursor_max(0)
assert_line('')
end
def test_vi_delete_meta_with_vi_next_char
input_keys("aaa bbb ccc ___ ddd\C-[02w")
assert_byte_pointer_size('aaa bbb ')