Skip to content

Commit

Permalink
Dialog rendering should Scroll down only when needed
Browse files Browse the repository at this point in the history
  • Loading branch information
tompng committed Mar 29, 2023
1 parent dbfe077 commit cc585ee
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
6 changes: 4 additions & 2 deletions lib/reline/line_editor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -719,8 +719,10 @@ def add_dialog_proc(name, p, context = nil)
ymax = ymax.clamp(screen_y_range.begin, screen_y_range.end)
dialog_y = @first_line_started_from + @started_from
cursor_y = dialog_y
scroll_down(ymax - cursor_y)
move_cursor_up(ymax - cursor_y)
if @highest_in_all < ymax
scroll_down(ymax - cursor_y)
move_cursor_up(ymax - cursor_y)
end
(ymin..ymax).each do |y|
move_cursor_down(y - cursor_y)
cursor_y = y
Expand Down
14 changes: 14 additions & 0 deletions test/reline/yamatanooroti/test_rendering.rb
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,20 @@ def test_simple_dialog_at_right_edge
EOC
end

def test_simple_dialog_with_scroll_screen
start_terminal(5, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog simple}, startup_message: 'Multiline REPL.')
write("if 1\n 2\n 3\n 4\n 5\n 6")
write("\C-p\C-n\C-p\C-p\C-p#")
close
assert_screen(<<~'EOC')
prompt> 2
prompt> 3#
prompt> 4
prompt> 5
prompt> 6 Ruby is...
EOC
end

def test_autocomplete_at_bottom
start_terminal(15, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
write('def hoge' + "\C-m" * 10 + "end\C-p ")
Expand Down

0 comments on commit cc585ee

Please sign in to comment.