[ruby/reline] Fix rendering bug of nomultiline prompt
(https://github.com/ruby/reline/pull/730) Fix bug of `print('a'*10); Reline.readline('>')` wrong rendering https://github.com/ruby/reline/commit/c0469a12b9
This commit is contained in:
parent
94b87084a6
commit
17a4c7cfcf
@ -331,7 +331,7 @@ module Reline
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
line_editor.print_nomultiline_prompt(prompt)
|
line_editor.print_nomultiline_prompt
|
||||||
line_editor.update_dialogs
|
line_editor.update_dialogs
|
||||||
line_editor.rerender
|
line_editor.rerender
|
||||||
|
|
||||||
|
@ -490,13 +490,9 @@ class Reline::LineEditor
|
|||||||
@output.puts lines.map { |l| "#{l}\r\n" }.join
|
@output.puts lines.map { |l| "#{l}\r\n" }.join
|
||||||
end
|
end
|
||||||
|
|
||||||
def print_nomultiline_prompt(prompt)
|
def print_nomultiline_prompt
|
||||||
return unless prompt && !@is_multiline
|
|
||||||
|
|
||||||
# Readline's test `TestRelineAsReadline#test_readline` requires first output to be prompt, not cursor reset escape sequence.
|
# Readline's test `TestRelineAsReadline#test_readline` requires first output to be prompt, not cursor reset escape sequence.
|
||||||
@rendered_screen.lines = [[[0, Reline::Unicode.calculate_width(prompt, true), prompt]]]
|
@output.write @prompt if @prompt && !@is_multiline
|
||||||
@rendered_screen.cursor_y = 0
|
|
||||||
@output.write prompt
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_differential
|
def render_differential
|
||||||
|
@ -1823,6 +1823,24 @@ begin
|
|||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_print_before_readline
|
||||||
|
code = <<~RUBY
|
||||||
|
puts 'Multiline REPL.'
|
||||||
|
2.times do
|
||||||
|
print 'a' * 10
|
||||||
|
Reline.readline '>'
|
||||||
|
end
|
||||||
|
RUBY
|
||||||
|
start_terminal(6, 30, ['ruby', "-I#{@pwd}/lib", '-rreline', '-e', code], startup_message: 'Multiline REPL.')
|
||||||
|
write "x\n"
|
||||||
|
close
|
||||||
|
assert_screen(<<~EOC)
|
||||||
|
Multiline REPL.
|
||||||
|
>x
|
||||||
|
>
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
def test_thread_safe
|
def test_thread_safe
|
||||||
start_terminal(6, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.')
|
start_terminal(6, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.')
|
||||||
write("[Thread.new{Reline.readline'>'},Thread.new{Reline.readmultiline('>'){true}}].map(&:join).size\n")
|
write("[Thread.new{Reline.readline'>'},Thread.new{Reline.readmultiline('>'){true}}].map(&:join).size\n")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user