зеркало из https://github.com/github/ruby.git
[ruby/reline] Reline.delete_text removes the current line in multiline
https://github.com/ruby/reline/commit/da90c094a1
This commit is contained in:
Родитель
b764c8d3c0
Коммит
4b33d860e8
|
@ -1291,10 +1291,32 @@ class Reline::LineEditor
|
|||
|
||||
def delete_text(start = nil, length = nil)
|
||||
if start.nil? and length.nil?
|
||||
@line&.clear
|
||||
@byte_pointer = 0
|
||||
@cursor = 0
|
||||
@cursor_max = 0
|
||||
if @is_multiline
|
||||
if @buffer_of_lines.size == 1
|
||||
@line&.clear
|
||||
@byte_pointer = 0
|
||||
@cursor = 0
|
||||
@cursor_max = 0
|
||||
elsif @line_index == (@buffer_of_lines.size - 1) and @line_index > 0
|
||||
@buffer_of_lines.pop
|
||||
@line_index -= 1
|
||||
@line = @buffer_of_lines[@line_index]
|
||||
@byte_pointer = 0
|
||||
@cursor = 0
|
||||
@cursor_max = calculate_width(@line)
|
||||
elsif @line_index < (@buffer_of_lines.size - 1)
|
||||
@buffer_of_lines.delete_at(@line_index)
|
||||
@line = @buffer_of_lines[@line_index]
|
||||
@byte_pointer = 0
|
||||
@cursor = 0
|
||||
@cursor_max = calculate_width(@line)
|
||||
end
|
||||
else
|
||||
@line&.clear
|
||||
@byte_pointer = 0
|
||||
@cursor = 0
|
||||
@cursor_max = 0
|
||||
end
|
||||
elsif not start.nil? and not length.nil?
|
||||
if @line
|
||||
before = @line.byteslice(0, start)
|
||||
|
|
|
@ -59,4 +59,17 @@ class Reline::WithinPipeTest < Reline::TestCase
|
|||
@writer.write("abcde\C-b\C-b\C-b\C-x\C-d\C-x\C-h\C-x\C-v\C-a\C-f\C-f EF\C-x\C-t gh\C-x\M-t\C-b\C-b\C-b\C-b\C-b\C-b\C-b\C-b\C-x\M-u\C-x\M-l\C-x\M-c\n")
|
||||
assert_equal "a\C-aDE gh Fe", Reline.readmultiline(&proc{ true })
|
||||
end
|
||||
|
||||
def test_delete_text_in_multiline
|
||||
@writer.write("abc\ndef\nxyz\n")
|
||||
result = Reline.readmultiline(&proc{ |str|
|
||||
if str.include?('xyz')
|
||||
Reline.delete_text
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
})
|
||||
assert_equal "abc\ndef", result
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче