diff options
author | aycabta <[email protected]> | 2021-01-31 13:45:21 +0900 |
---|---|---|
committer | aycabta <[email protected]> | 2021-02-07 05:11:13 +0900 |
commit | bd0f8b36fd31951a23f918074a2ba2c95c55a28a (patch) | |
tree | ffbb998a1a8c3ea87150c536dfa697b0cc258acd /lib/reline/line_editor.rb | |
parent | 03523fdafb320d53cc455065a25079a9e3a93707 (diff) |
[ruby/reline] Show all lines higher than the screen when finished
On Unix-like OSes, logs prior to the screen are not editable. When the code
is higher than the screen, the code is only shown on the screen until input
is finished, but when it is finished, all lines are outputted.
https://github.com/ruby/reline/commit/8cd9132a39
Diffstat (limited to 'lib/reline/line_editor.rb')
-rw-r--r-- | lib/reline/line_editor.rb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 1017dc6cc9..47ffe4dfbd 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -388,6 +388,19 @@ class Reline::LineEditor @cleared = false return end + if @is_multiline and finished? and @scroll_partial_screen + # Re-output all code higher than the screen when finished. + Reline::IOGate.move_cursor_up(@first_line_started_from + @started_from - @scroll_partial_screen) + Reline::IOGate.move_cursor_column(0) + @scroll_partial_screen = nil + prompt, prompt_width, prompt_list = check_multiline_prompt(whole_lines, prompt) + modify_lines(whole_lines).each_with_index do |line, index| + @output.write "#{prompt_list ? prompt_list[index] : prompt}#{line}\n" + Reline::IOGate.erase_after_cursor + end + @output.flush + return + end new_highest_in_this = calculate_height_by_width(prompt_width + calculate_width(@line.nil? ? '' : @line)) # FIXME: end of logical line sometimes breaks rendered = false |