1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/reline] Move cursor to currect vertical pos after rendering a logical line

https://github.com/ruby/reline/commit/9b932df544
This commit is contained in:
aycabta 2020-09-11 05:48:59 +09:00
parent 9baf1bd0a4
commit ce389ade45
2 changed files with 42 additions and 4 deletions

View file

@ -524,12 +524,14 @@ class Reline::LineEditor
end
Reline::IOGate.erase_after_cursor
if with_control
move_cursor_up(height - 1)
# Just after rendring, so the cursor is on the last line.
if finished?
move_cursor_down(@started_from)
Reline::IOGate.move_cursor_column(0)
else
# Moves up from bottom of lines to the cursor position.
move_cursor_up(height - 1 - @started_from)
Reline::IOGate.move_cursor_column((prompt_width + @cursor) % @screen_size.last)
end
move_cursor_down(@started_from)
Reline::IOGate.move_cursor_column((prompt_width + @cursor) % @screen_size.last)
end
height
end

View file

@ -64,6 +64,42 @@ begin
EOC
end
def test_finish_autowrapped_line
start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl})
sleep 0.5
write("[{'user'=>{'email'=>'a@a', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]\n")
close
assert_screen(<<~EOC)
Multiline REPL.
prompt> [{'user'=>{'email'=>'a@a', 'id'=
>'ABC'}, 'version'=>4, 'status'=>'succee
ded'}]
=> [{"user"=>{"email"=>"a@a", "id"=>"ABC
"}, "version"=>4, "status"=>"succeeded"}
]
prompt>
EOC
end
def test_finish_autowrapped_line_in_the_middle_of_lines
start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/bin/multiline_repl})
sleep 0.5
write("[{'user'=>{'email'=>'abcdef@abcdef', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]#{"\C-b"*7}\n")
close
assert_screen(<<~EOC)
Multiline REPL.
prompt> [{'user'=>{'email'=>'a
bcdef@abcdef', 'id'=>'ABC'}, '
version'=>4, 'status'=>'succee
ded'}]
=> [{"user"=>{"email"=>"abcdef
@abcdef", "id"=>"ABC"}, "versi
on"=>4, "status"=>"succeeded"}
]
prompt>
EOC
end
def test_prompt
File.open(@inputrc_file, 'w') do |f|
f.write <<~'LINES'