diff --git a/lib/reline/io/ansi.rb b/lib/reline/io/ansi.rb index 500eb37a13..1d20719779 100644 --- a/lib/reline/io/ansi.rb +++ b/lib/reline/io/ansi.rb @@ -309,6 +309,13 @@ class Reline::ANSI < Reline::IO # Signal.trap may raise an ArgumentError if the platform doesn't support the signal. end + def read_single_char(keyseq_timeout) + # Disable intr to read `C-c` `C-z` `C-\` for quoted insert + @input.raw(intr: false) do + super + end + end + def prep # Enable bracketed paste write "\e[?2004h" if Reline.core.config.enable_bracketed_paste && both_tty? diff --git a/lib/reline/unicode.rb b/lib/reline/unicode.rb index 5ccd288da3..7781d0c13a 100644 --- a/lib/reline/unicode.rb +++ b/lib/reline/unicode.rb @@ -28,6 +28,7 @@ class Reline::Unicode 0x19 => '^Y', 0x1A => '^Z', # C-z 0x1B => '^[', # C-[ C-3 + 0x1C => '^\\', # C-\ 0x1D => '^]', # C-] 0x1E => '^^', # C-~ C-6 0x1F => '^_', # C-_ C-7 diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index e9f9ee66d2..2952d3bfc8 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -1724,6 +1724,26 @@ begin close end + def test_quoted_insert_intr_keys + 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 '"' + write "\C-v" + write "\C-c" + write "\C-v" + write "\C-z" + write "\C-v" + write "\C-\\" + write "\".bytes\n" + assert_screen(<<~EOC) + Multiline REPL. + prompt> "^C^Z^\\\".bytes + => [3, 26, 28] + prompt> + EOC + close + end + def test_print_before_readline code = <<~RUBY puts 'Multiline REPL.'