From c8d4b103a924aca45c6170a5f6122eec3084641a Mon Sep 17 00:00:00 2001 From: tomoya ishida Date: Sat, 21 Oct 2023 20:56:21 +0900 Subject: [PATCH] [ruby/irb] Fix dancing-ruby Ctrl+C stop (https://github.com/ruby/irb/pull/735) https://github.com/ruby/irb/commit/802b1cb6d8 --- lib/irb/easter-egg.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/irb/easter-egg.rb b/lib/irb/easter-egg.rb index 1d7460abcdc84b..adc0834d55b69f 100644 --- a/lib/irb/easter-egg.rb +++ b/lib/irb/easter-egg.rb @@ -115,7 +115,9 @@ def render_frame(i) io.write easter_egg_logo(:large) end when :dancing - begin + STDOUT.cooked do + interrupted = false + prev_trap = trap("SIGINT") { interrupted = true } canvas = Canvas.new(Reline.get_screen_size) Reline::IOGate.set_winch_handler do canvas = Canvas.new(Reline.get_screen_size) @@ -131,10 +133,12 @@ def render_frame(i) buff[0, 20] = "\e[0mPress Ctrl+C to stop\e[31m\e[1m" print "\e[H" + buff sleep 0.05 + break if interrupted end rescue Interrupt ensure print "\e[0m\e[?1049l" + trap("SIGINT", prev_trap) end end end