diff options
author | aycabta <[email protected]> | 2021-03-23 00:56:32 +0900 |
---|---|---|
committer | aycabta <[email protected]> | 2021-03-24 15:43:19 +0900 |
commit | 4b33d860e84f0a5efeefbf8a68324801a0215a08 (patch) | |
tree | 3dec8ac66711a22387ea5bd079fbcb301f4ae679 /lib | |
parent | b764c8d3c05170214802a947b2fd32c91c6cfd68 (diff) |
[ruby/reline] Reline.delete_text removes the current line in multiline
https://github.com/ruby/reline/commit/da90c094a1
Diffstat (limited to 'lib')
-rw-r--r-- | lib/reline/line_editor.rb | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 12a2bde234..870b89b550 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -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) |