From e8e7ff1333b9b32d72a1d8f789a186d58c811420 Mon Sep 17 00:00:00 2001 From: tomoya ishida Date: Sat, 18 Mar 2023 23:37:05 +0900 Subject: [PATCH] [ruby/reline] Fix: line longer than terminal width breaks rendering (https://github.com/ruby/reline/pull/516) https://github.com/ruby/reline/commit/ae5f9b87ab --- lib/reline/line_editor.rb | 1 + test/reline/yamatanooroti/test_rendering.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 87ce7fba5d..bd2f2c858a 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -972,6 +972,7 @@ class Reline::LineEditor prev_line_prompt = @prompt_proc ? prompt_list[@line_index - 1] : prompt prev_line_prompt_width = @prompt_proc ? calculate_width(prev_line_prompt, true) : prompt_width prev_line = modify_lines(lines)[@line_index - 1] + move_cursor_up(@started_from) render_partial(prev_line_prompt, prev_line_prompt_width, prev_line, @first_line_started_from + @started_from, with_control: false) scroll_down(1) render_partial(prompt, prompt_width, @line, @first_line_started_from + @started_from + 1, with_control: false) diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index 3b9943b486..e3ff83bab6 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -281,6 +281,23 @@ begin EOC end + def test_multiline_add_new_line_and_autowrap + start_terminal(10, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') + write("def aaaaaaaaaa") + write("\n") + write(" bbbbbbbbbbbb") + write("\n") + close + assert_screen(<<~EOC) + Multiline REPL. + prompt> def aaaaaaaa + aa + prompt> bbbbbbbbbb + bb + prompt> + EOC + end + def test_clear start_terminal(10, 15, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("3\C-l")