summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/highline.rb1
-rw-r--r--lib/highline/io_console_compatible.rb2
-rw-r--r--lib/highline/terminal/io_console.rb2
-rwxr-xr-xtest/test_highline.rb14
4 files changed, 17 insertions, 2 deletions
diff --git a/lib/highline.rb b/lib/highline.rb
index 3e60cd3..47df4be 100644
--- a/lib/highline.rb
+++ b/lib/highline.rb
@@ -538,6 +538,7 @@ class HighLine
terminal.raw_no_echo_mode_exec do
loop do
character = terminal.get_character
+ raise Interrupt if character == "\u0003"
break unless character
break if ["\n", "\r"].include? character
diff --git a/lib/highline/io_console_compatible.rb b/lib/highline/io_console_compatible.rb
index 7ff06f5..7fa388c 100644
--- a/lib/highline/io_console_compatible.rb
+++ b/lib/highline/io_console_compatible.rb
@@ -13,7 +13,7 @@ require "tempfile"
#
module IOConsoleCompatible
- def getch
+ def getch(min:nil, time:nil, intr: nil)
getc
end
diff --git a/lib/highline/terminal/io_console.rb b/lib/highline/terminal/io_console.rb
index d28ee0d..9374f09 100644
--- a/lib/highline/terminal/io_console.rb
+++ b/lib/highline/terminal/io_console.rb
@@ -27,7 +27,7 @@ class HighLine
# (see Terminal#get_character)
def get_character
- input.getch # from ruby io/console
+ input.getch(intr: true) # from ruby io/console
rescue Errno::ENOTTY
input.getc
end
diff --git a/test/test_highline.rb b/test/test_highline.rb
index 8de8551..a5c4e26 100755
--- a/test/test_highline.rb
+++ b/test/test_highline.rb
@@ -1300,6 +1300,20 @@ class TestHighLine < Minitest::Test
assert_equal("maçã", answer)
end
+ def test_echo_false_with_ctrl_c_interrupts
+ @input << "String with a ctrl-c at the end \u0003 \n"
+ @input.rewind
+ @answer = nil
+
+ assert_raises(Interrupt) do
+ @answer = @terminal.ask("Type: ") do |q|
+ q.echo = false
+ end
+ end
+
+ assert_nil @answer
+ end
+
def test_range_requirements
@input << "112\n-541\n28\n"
@input.rewind