Skip to content

Commit c5d5c44

Browse files
authored
Fix bracketed paste and scrolling bug (#801)
* Fix set_pasting_state bug with bracketed paste * Fix rendered cursor_y caching in case of rendering the screen without scroll_into_view
1 parent 72c0ec0 commit c5d5c44

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

lib/reline.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,6 @@ def readline(prompt = '', add_hist = false)
341341
line_editor.set_signal_handlers
342342
loop do
343343
read_io(config.keyseq_timeout) { |inputs|
344-
line_editor.set_pasting_state(io_gate.in_pasting?)
345344
inputs.each do |key|
346345
case key.method_symbol
347346
when :bracketed_paste_start
@@ -350,14 +349,14 @@ def readline(prompt = '', add_hist = false)
350349
when :quoted_insert, :ed_quoted_insert
351350
key = Reline::Key.new(io_gate.read_single_char(config.keyseq_timeout), :insert_raw_char)
352351
end
352+
line_editor.set_pasting_state(io_gate.in_pasting?)
353353
line_editor.update(key)
354354
end
355355
}
356356
if line_editor.finished?
357357
line_editor.render_finished
358358
break
359359
else
360-
line_editor.set_pasting_state(io_gate.in_pasting?)
361360
line_editor.rerender
362361
end
363362
end

lib/reline/line_editor.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ def render
542542
Reline::IOGate.show_cursor
543543
end
544544
Reline::IOGate.move_cursor_column new_cursor_x
545+
new_cursor_y = new_cursor_y.clamp(0, screen_height - 1)
545546
Reline::IOGate.move_cursor_down new_cursor_y - cursor_y
546547
@rendered_screen.cursor_y = new_cursor_y
547548
ensure

test/reline/yamatanooroti/test_rendering.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,14 @@ def test_bracketed_paste
550550
prompt> 3
551551
prompt> end
552552
EOC
553+
write("\e[200~.tap do\r\t4\r\t5\rend\e[201~")
554+
assert_screen(<<~EOC)
555+
prompt> 3
556+
prompt> end.tap do
557+
prompt> 4
558+
prompt> 5
559+
prompt> end
560+
EOC
553561
close
554562
end
555563

0 commit comments

Comments
 (0)