[ruby/reline] Fix line rendering when newline is added at the end of the buffer
https://github.com/ruby/reline/commit/7d61b3df9a
This commit is contained in:
parent
440b9d2c6f
commit
91f353b1c3
@ -468,7 +468,7 @@ class Reline::LineEditor
|
|||||||
rendered = false
|
rendered = false
|
||||||
if @add_newline_to_end_of_buffer
|
if @add_newline_to_end_of_buffer
|
||||||
clear_dialog_with_content
|
clear_dialog_with_content
|
||||||
rerender_added_newline(prompt, prompt_width)
|
rerender_added_newline(prompt, prompt_width, prompt_list)
|
||||||
@add_newline_to_end_of_buffer = false
|
@add_newline_to_end_of_buffer = false
|
||||||
else
|
else
|
||||||
if @just_cursor_moving and not @rerender_all
|
if @just_cursor_moving and not @rerender_all
|
||||||
@ -969,11 +969,19 @@ class Reline::LineEditor
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private def rerender_added_newline(prompt, prompt_width)
|
private def rerender_added_newline(prompt, prompt_width, prompt_list)
|
||||||
scroll_down(1)
|
|
||||||
@buffer_of_lines[@previous_line_index] = @line
|
@buffer_of_lines[@previous_line_index] = @line
|
||||||
@line = @buffer_of_lines[@line_index]
|
@line = @buffer_of_lines[@line_index]
|
||||||
unless @in_pasting
|
@previous_line_index = nil
|
||||||
|
if @in_pasting
|
||||||
|
scroll_down(1)
|
||||||
|
else
|
||||||
|
lines = whole_lines
|
||||||
|
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]
|
||||||
|
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)
|
render_partial(prompt, prompt_width, @line, @first_line_started_from + @started_from + 1, with_control: false)
|
||||||
end
|
end
|
||||||
@cursor = @cursor_max = calculate_width(@line)
|
@cursor = @cursor_max = calculate_width(@line)
|
||||||
@ -982,7 +990,6 @@ class Reline::LineEditor
|
|||||||
@highest_in_this = calculate_height_by_width(prompt_width + @cursor_max)
|
@highest_in_this = calculate_height_by_width(prompt_width + @cursor_max)
|
||||||
@first_line_started_from += @started_from + 1
|
@first_line_started_from += @started_from + 1
|
||||||
@started_from = calculate_height_by_width(prompt_width + @cursor) - 1
|
@started_from = calculate_height_by_width(prompt_width + @cursor) - 1
|
||||||
@previous_line_index = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def just_move_cursor
|
def just_move_cursor
|
||||||
|
@ -690,6 +690,19 @@ begin
|
|||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_newline_after_wrong_indent
|
||||||
|
start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.')
|
||||||
|
write "if 1\n aa"
|
||||||
|
write "\n"
|
||||||
|
close
|
||||||
|
assert_screen(<<~EOC)
|
||||||
|
Multiline REPL.
|
||||||
|
prompt> if 1
|
||||||
|
prompt> aa
|
||||||
|
prompt>
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
def test_suppress_auto_indent_just_after_pasted
|
def test_suppress_auto_indent_just_after_pasted
|
||||||
start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.')
|
start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.')
|
||||||
write("def hoge\n [[\n 3]]\ned")
|
write("def hoge\n [[\n 3]]\ned")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user