Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/reline.rb
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,8 @@ def readline(prompt = '', add_hist = false)
# io_gate is Reline::ANSI because the key :bracketed_paste_start is only assigned in Reline::ANSI
key = Reline::Key.new(io_gate.read_bracketed_paste, :insert_multiline_text)
when :quoted_insert, :ed_quoted_insert
key = Reline::Key.new(io_gate.read_single_char(config.keyseq_timeout), :insert_raw_char)
char = io_gate.read_single_char(config.keyseq_timeout.fdiv(1000))
key = Reline::Key.new(char || '', :insert_raw_char)
end
line_editor.set_pasting_state(io_gate.in_pasting?)
line_editor.update(key)
Expand Down
4 changes: 2 additions & 2 deletions lib/reline/io.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ def reset_color_sequence
end

# Read a single encoding valid character from the input.
def read_single_char(keyseq_timeout)
def read_single_char(timeout_second)
buffer = String.new(encoding: Encoding::ASCII_8BIT)
loop do
timeout = buffer.empty? ? Float::INFINITY : keyseq_timeout
timeout = buffer.empty? ? Float::INFINITY : timeout_second
c = getc(timeout)
return unless c

Expand Down
2 changes: 1 addition & 1 deletion lib/reline/io/ansi.rb
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ def set_winch_handler(&handler)
# Signal.trap may raise an ArgumentError if the platform doesn't support the signal.
end

def read_single_char(keyseq_timeout)
def read_single_char(timeout_second)
# Disable intr to read `C-c` `C-z` `C-\` for quoted insert
@input.raw(intr: false) do
super
Expand Down
15 changes: 15 additions & 0 deletions test/reline/yamatanooroti/test_rendering.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1798,6 +1798,21 @@ def test_quoted_insert_intr_keys
close
end

def test_quoted_insert_timeout
omit if Reline.core.io_gate.win?

start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.')
write "\C-v"
write "\C-a"
write "\C-v"
# broken bytes should be ignored with timeout
write_without_meta_conversion "\xE3\xE4\xE5"
sleep 1
write "\C-v"
write "\C-b"
assert_screen(/prompt> \^A\^B/)
end

def test_print_before_readline
code = <<~RUBY
puts 'Multiline REPL.'
Expand Down