From e0e96cbdce6276b657f2483ec5f8dfd8cf1dfb52 Mon Sep 17 00:00:00 2001 From: Faheetah Date: Wed, 4 Jan 2023 06:50:42 -0300 Subject: Handle Ctrl-C when Question#echo = false (raw_no_echo_mode) --- lib/highline.rb | 1 + 1 file changed, 1 insertion(+) 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 -- cgit v1.2.1 From aea8747a2d787ef9954e56b81ce451322e72322e Mon Sep 17 00:00:00 2001 From: "Abinoam P. Marques Jr" Date: Thu, 5 Jan 2023 06:11:14 -0300 Subject: Handle interrupts directly at io/console Added to io/console at commit at 24, September, 2019 * https://github.com/ruby/io-console/commit/7cba76561a39722fbcee3a65d4d6b8bc6f15df67 Released in Ruby 2.7.0, released at 25, December, 2019 * https://www.ruby-lang.org/en/news/2019/12/25/ruby-2-7-0-released/ Documented at 17, February, 2020 * https://github.com/ruby/io-console/commit/82b630cd79594339d4b05ebe211f47d62dbe1fc5 Documented in Ruby 2.7.1, released at 31, March, 2020 * https://ruby-doc.org/stdlib-2.7.1/libdoc/io/console/rdoc/IO.html#method-i-getch * https://www.ruby-lang.org/en/news/2020/03/31/ruby-2-7-1-released/ --- lib/highline/terminal/io_console.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- cgit v1.2.1 From 3896a84e2c3ed53be5a831471c4b26cf513a6eaf Mon Sep 17 00:00:00 2001 From: "Abinoam P. Marques Jr" Date: Thu, 5 Jan 2023 21:44:46 -0300 Subject: Update IOConsoleCompatible#getch to io/console signature --- lib/highline/io_console_compatible.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- cgit v1.2.1 From 75010bcf9047dec765429adaa5dbec1cfc66a0af Mon Sep 17 00:00:00 2001 From: "Abinoam P. Marques Jr" Date: Fri, 6 Jan 2023 19:11:49 -0300 Subject: Add test for raise interrupt with ctrl-c --- test/test_highline.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 -- cgit v1.2.1