aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2019-12-25 09:29:46 +0900
committeraycabta <aycabta@gmail.com>2019-12-25 09:34:13 +0900
commit622e47a1dbeee52fb218b816943b69cb88e17ae6 (patch)
tree4657ee1dff43f4538e88660e0eaf918d4a0a69ff
parent8e6d51e09a93ae2c57d56105a5fd39fb92855394 (diff)
downloadruby-622e47a1dbeee52fb218b816943b69cb88e17ae6.tar.gz
^D on non-empty line in vi mode behaves like Enter
-rw-r--r--lib/reline/line_editor.rb4
-rw-r--r--test/reline/test_key_actor_vi.rb19
2 files changed, 14 insertions, 9 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index 721d50b746..d668da7ad7 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -1938,9 +1938,11 @@ class Reline::LineEditor
@eof = true
finish
else
- # TODO: list
+ ed_newline(key)
end
end
+ alias_method :vi_end_of_transmission, :vi_list_or_eof
+ alias_method :vi_eof_maybe, :vi_list_or_eof
private def ed_delete_next_char(key, arg: 1)
byte_size = Reline::Unicode.get_next_mbchar_size(@line, @byte_pointer)
diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb
index dc5030c0bf..1ea160b6b5 100644
--- a/test/reline/test_key_actor_vi.rb
+++ b/test/reline/test_key_actor_vi.rb
@@ -812,16 +812,19 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
end
def test_vi_list_or_eof
- input_keys('a')
- assert_byte_pointer_size('a')
- assert_cursor(1)
- assert_cursor_max(1)
+ input_keys("\C-d") # quit from inputing
+ assert_line(nil)
+ assert(@line_editor.finished?)
+ end
+
+ def test_vi_list_or_eof_with_non_empty_line
+ input_keys('ab')
+ assert_byte_pointer_size('ab')
+ assert_cursor(2)
+ assert_cursor_max(2)
refute(@line_editor.finished?)
input_keys("\C-d")
- assert_line('a')
- refute(@line_editor.finished?)
- input_keys("\C-h\C-d")
- assert_line(nil)
+ assert_line('ab')
assert(@line_editor.finished?)
end