summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2020-12-24 21:24:35 +0900
committeraycabta <aycabta@gmail.com>2020-12-24 23:26:22 +0900
commit0db9842b2ca85709424d6c9c1e11caeae30dfae7 (patch)
tree0270bc545fe40b88188d0a298418379e5c10a3f9
parent8d5d139afaf37665d2e77eeb1197e216491d805d (diff)
[ruby/reline] Delete the last char of a line by dw
This closes ruby/reline#229. https://github.com/ruby/reline/commit/3f0ae689c4
-rw-r--r--lib/reline/unicode.rb6
-rw-r--r--test/reline/test_key_actor_vi.rb23
2 files changed, 26 insertions, 3 deletions
diff --git a/lib/reline/unicode.rb b/lib/reline/unicode.rb
index 09aff698b8..b7cecfeaee 100644
--- a/lib/reline/unicode.rb
+++ b/lib/reline/unicode.rb
@@ -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/
diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb
index edef573619..45a5327763 100644
--- a/test/reline/test_key_actor_vi.rb
+++ b/test/reline/test_key_actor_vi.rb
@@ -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 ')