diff --git a/lib/tty/reader/console.rb b/lib/tty/reader/console.rb index d5d41b9..5474f72 100644 --- a/lib/tty/reader/console.rb +++ b/lib/tty/reader/console.rb @@ -10,6 +10,7 @@ class Reader class Console ESC = "\e" CSI = "\e[" + XTERM = "\eO" TIMEOUT = 0.1 @@ -31,7 +32,7 @@ def initialize(input) @input = input @mode = Mode.new(input) @keys = Keys.ctrl_keys.merge(Keys.keys) - @escape_codes = [[ESC.ord], CSI.bytes.to_a] + @escape_codes = [[ESC.ord], CSI.bytes.to_a, XTERM.bytes.to_a] end # Get a character from console with echo diff --git a/spec/unit/read_keypress_spec.rb b/spec/unit/read_keypress_spec.rb index 98d686f..98e8fe8 100644 --- a/spec/unit/read_keypress_spec.rb +++ b/spec/unit/read_keypress_spec.rb @@ -25,6 +25,18 @@ expect(answer).to eq("ㄱ") end + TTY::Reader::Keys.keys.each do |code, name| + it "reads #{Shellwords.escape(code)} as a #{name} key press" do + reader = described_class.new(input: input, output: out, env: env) + input << code + input.rewind + + answer = reader.read_keypress + + expect(answer).to eq(code) + end + end + context "when Ctrl+C pressed" do it "defaults to raising InputInterrupt" do reader = described_class.new(input: input, output: out, env: env)