diff options
author | Abinoam P. Marques Jr <abinoam@gmail.com> | 2023-01-06 19:16:29 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-06 19:16:29 -0300 |
commit | 8e5f773e9e4180f30f850a6ec364a082b8bc8f3f (patch) | |
tree | 7a436aee021704aaacff5fb94cb304d0fe6f04ef | |
parent | 7755f1f3f3b80e4c1c48446ea8234eaf954e6538 (diff) | |
parent | 75010bcf9047dec765429adaa5dbec1cfc66a0af (diff) | |
download | highline-8e5f773e9e4180f30f850a6ec364a082b8bc8f3f.tar.gz |
Merge pull request #259 from abinoam/issue_236
Handle Ctrl-C when Question#echo = false (raw_no_echo_mode)
-rw-r--r-- | lib/highline.rb | 1 | ||||
-rw-r--r-- | lib/highline/io_console_compatible.rb | 2 | ||||
-rw-r--r-- | lib/highline/terminal/io_console.rb | 2 | ||||
-rwxr-xr-x | test/test_highline.rb | 14 |
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 |