8000 Implement vi_change_meta · ruby/reline@8538e0e · GitHub
[go: up one dir, main page]

Skip to content

Commit 8538e0e

Browse files
committed
Implement vi_change_meta
1 parent 298e279 commit 8538e0e

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

lib/reline/line_editor.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1922,6 +1922,18 @@ def finish
19221922
end
19231923

19241924
private def vi_change_meta(key)
1925+
@waiting_operator_proc = proc { |cursor_diff, byte_pointer_diff|
1926+
if byte_pointer_diff > 0
1927+
@line, cut = byteslice!(@line, @byte_pointer, byte_pointer_diff)
1928+
elsif byte_pointer_diff < 0
1929+
@line, cut = byteslice!(@line, @byte_pointer + byte_pointer_diff, -byte_pointer_diff)
1930+
end
1931+
copy_for_vi(cut)
1932+
@cursor += cursor_diff if cursor_diff < 0
1933+
@cursor_max -= cursor_diff.abs
1934+
@byte_pointer += byte_pointer_diff if byte_pointer_diff < 0
1935+
@config.editing_mode = :vi_insert
1936+
}
19251937
end
19261938

19271939
private def vi_delete_meta(key)

test/reline/test_key_actor_vi.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,4 +1214,27 @@ def test_vi_delete_meta
12141214
assert_cursor_max(11)
12151215
assert_line('aaa ddd eee')
12161216
end
1217+
1218+
def test_vi_change_meta
1219+
input_keys("aaa bbb ccc ddd eee\C-[02w")
1220+
assert_byte_pointer_size('aaa bbb ')
1221+
assert_cursor(8)
1222+
assert_cursor_max(19)
1223+
assert_line('aaa bbb ccc ddd eee')
1224+
input_keys('cwaiueo ')
1225+
assert_byte_pointer_size('aaa bbb aiueo ')
1226+
assert_cursor(14)
1227+
assert_cursor_max(21)
1228+
assert_line('aaa bbb aiueo ddd eee')
1229+
input_keys("\C-[")
1230+
assert_byte_pointer_size('aaa bbb aiueo')
1231+
assert_cursor(13)
1232+
assert_cursor_max(21)
1233+
assert_line('aaa bbb aiueo ddd eee')
1234+
input_keys('cb')
1235+
assert_byte_pointer_size('aaa bbb ')
1236+
assert_cursor(8)
1237+
assert_cursor_max(16)
1238+
assert_line('aaa bbb ddd eee')
1239+
end
12171240
end

0 commit comments

Comments
 (0)
0