mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
[ruby/reline] Use appropriate dialog height and reduce screen pushup
problem (https://github.com/ruby/reline/pull/542) * Provide preferred_dialog_height for dialog positioning * Fix rendering test
This commit is contained in:
parent
bf1bc5362e
commit
5d137a7f77
3 changed files with 34 additions and 18 deletions
|
@ -260,7 +260,7 @@ module Reline
|
||||||
pos: cursor_pos_to_render,
|
pos: cursor_pos_to_render,
|
||||||
contents: result,
|
contents: result,
|
||||||
scrollbar: true,
|
scrollbar: true,
|
||||||
height: 15,
|
height: [15, preferred_dialog_height].min,
|
||||||
bg_color: 46,
|
bg_color: 46,
|
||||||
pointer_bg_color: 45,
|
pointer_bg_color: 45,
|
||||||
fg_color: 37,
|
fg_color: 37,
|
||||||
|
|
|
@ -562,6 +562,16 @@ class Reline::LineEditor
|
||||||
@line_editor.instance_variable_get(:@screen_size).last
|
@line_editor.instance_variable_get(:@screen_size).last
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def screen_height
|
||||||
|
@line_editor.instance_variable_get(:@screen_size).first
|
||||||
|
end
|
||||||
|
|
||||||
|
def preferred_dialog_height
|
||||||
|
rest_height = @line_editor.instance_variable_get(:@rest_height)
|
||||||
|
scroll_partial_screen = @line_editor.instance_variable_get(:@scroll_partial_screen) || 0
|
||||||
|
[cursor_pos.y - scroll_partial_screen, rest_height, (screen_height + 6) / 5].max
|
||||||
|
end
|
||||||
|
|
||||||
def completion_journey_data
|
def completion_journey_data
|
||||||
@line_editor.instance_variable_get(:@completion_journey_data)
|
@line_editor.instance_variable_get(:@completion_journey_data)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1365,21 +1365,21 @@ begin
|
||||||
|
|
||||||
def test_scroll_at_bottom_for_dialog
|
def test_scroll_at_bottom_for_dialog
|
||||||
start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
||||||
write("\n\n\n\n\n\n")
|
write("\n\n\n\n\n\n\n\n\n\n\n")
|
||||||
write("def hoge\n\n\n\n\n\n\nend\C-p\C-p\C-p\C-e")
|
write("def hoge\n\nend\C-p\C-e")
|
||||||
write(" S")
|
write(" S")
|
||||||
close
|
close
|
||||||
assert_screen(<<~'EOC')
|
assert_screen(<<~'EOC')
|
||||||
|
prompt>
|
||||||
|
prompt>
|
||||||
|
prompt>
|
||||||
|
prompt>
|
||||||
|
prompt>
|
||||||
prompt> def hoge
|
prompt> def hoge
|
||||||
prompt>
|
|
||||||
prompt>
|
|
||||||
prompt>
|
|
||||||
prompt> S
|
prompt> S
|
||||||
prompt> String
|
prompt> enString █
|
||||||
prompt> Struct
|
Struct ▀
|
||||||
prompt> enSymbol
|
Symbol
|
||||||
ScriptError
|
|
||||||
SyntaxError
|
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1433,30 +1433,35 @@ begin
|
||||||
|
|
||||||
def test_clear_dialog_when_just_move_cursor_at_last_line
|
def test_clear_dialog_when_just_move_cursor_at_last_line
|
||||||
start_terminal(10, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
start_terminal(10, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
||||||
write("class A\n 3\nend\n")
|
write("class A\n 3\nend\n\n\n")
|
||||||
write("\C-p\C-p\C-p\C-e\C-hS")
|
write("\C-p\C-p\C-e; S")
|
||||||
write("\C-n")
|
write("\C-n")
|
||||||
write("1")
|
write(";")
|
||||||
close
|
close
|
||||||
assert_screen(<<~'EOC')
|
assert_screen(<<~'EOC')
|
||||||
prompt> 3
|
prompt> 3
|
||||||
prompt> end
|
prompt> end
|
||||||
=> 3
|
=> 3
|
||||||
prompt> class S
|
prompt>
|
||||||
prompt> 31
|
prompt>
|
||||||
prompt> end
|
prompt> class A
|
||||||
|
prompt> 3; S
|
||||||
|
prompt> end;
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_clear_dialog_when_adding_new_line_to_end_of_buffer
|
def test_clear_dialog_when_adding_new_line_to_end_of_buffer
|
||||||
start_terminal(10, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
start_terminal(10, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
||||||
write("class A\n def a\n 3\n end\nend")
|
write("class A\n def a\n 3\n 3\n end\nend")
|
||||||
write("\n")
|
write("\n")
|
||||||
write("class S")
|
write("class S")
|
||||||
write("\n")
|
write("\n")
|
||||||
write(" 3")
|
write(" 3")
|
||||||
close
|
close
|
||||||
assert_screen(<<~'EOC')
|
assert_screen(<<~'EOC')
|
||||||
|
prompt> def a
|
||||||
|
prompt> 3
|
||||||
|
prompt> 3
|
||||||
prompt> end
|
prompt> end
|
||||||
prompt> end
|
prompt> end
|
||||||
=> :a
|
=> :a
|
||||||
|
@ -1474,6 +1479,7 @@ begin
|
||||||
write(" 3")
|
write(" 3")
|
||||||
close
|
close
|
||||||
assert_screen(<<~'EOC')
|
assert_screen(<<~'EOC')
|
||||||
|
prompt> 3
|
||||||
prompt> end
|
prompt> end
|
||||||
prompt> end
|
prompt> end
|
||||||
=> :a
|
=> :a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue