mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/reline] Reline.delete_text removes the current line in multiline
da90c094a1
This commit is contained in:
parent
b764c8d3c0
commit
4b33d860e8
2 changed files with 39 additions and 4 deletions
|
@ -1291,10 +1291,32 @@ class Reline::LineEditor
|
||||||
|
|
||||||
def delete_text(start = nil, length = nil)
|
def delete_text(start = nil, length = nil)
|
||||||
if start.nil? and length.nil?
|
if start.nil? and length.nil?
|
||||||
@line&.clear
|
if @is_multiline
|
||||||
@byte_pointer = 0
|
if @buffer_of_lines.size == 1
|
||||||
@cursor = 0
|
@line&.clear
|
||||||
@cursor_max = 0
|
@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?
|
elsif not start.nil? and not length.nil?
|
||||||
if @line
|
if @line
|
||||||
before = @line.byteslice(0, start)
|
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")
|
@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 })
|
assert_equal "a\C-aDE gh Fe", Reline.readmultiline(&proc{ true })
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue