Umm, I guess my searching was just plain bad. Thanks for being kind to
me though. Mucho gracias.
Phy
----- Original Message ----
From: Logan C. [email protected]
To: ruby-talk ML [email protected]
Sent: Wednesday, April 4, 2007 10:47:20 PM
Subject: Re: Ruby and capturing ^C
Is there any way to capture or “trap” ^C within Ruby? Something similar to shell “trapping” is what I am after so that I can do clean up in the event ^C is pressed.
I’m running autotest through a rake task. Autotest uses ^C to
restart the tests, rake uses it to cancel the task at hand.
What would be the best way to remove this trap from rake?
Under Posix, you would have to use sigmask(). I don’t think there is a
ruby
equivalent though …
Note that ^C is already trapped by the interpreter, which raises
Interrupt …
I’m running autotest through a rake task. Autotest uses ^C to restart
the tests, rake uses it to cancel the task at hand.
What would be the best way to remove this trap from rake?
I don’t know if this will help without hacking into rake or autotest,
but you can save and restore the handler. The return value of #trap is
the previous handler, which is just a proc object:
There is also a useful special case. If you pass “DEFAULT” as the
handler, you go back to ruby’s default (which is different from irb’s
handler):
irb(main):001:0> trap(“INT”, “DEFAULT”)
=> #Proc:0x02b2ac30@c:/ruby/lib/ruby/1.8/irb.rb:65
irb(main):002:0> ### <-- I pressed ^C and Enter here
c:/ruby/lib/ruby/1.8/irb/input-method.rb:97:in gets': Interrupt from c:/ruby/lib/ruby/1.8/irb.rb:132:ineval_input’
from c:/ruby/lib/ruby/1.8/irb.rb:259:in signal_status' from c:/ruby/lib/ruby/1.8/irb.rb:131:ineval_input’
from c:/ruby/lib/ruby/1.8/irb/ruby-lex.rb:189:in call' from c:/ruby/lib/ruby/1.8/irb/ruby-lex.rb:189:inbuf_input’
from c:/ruby/lib/ruby/1.8/irb/ruby-lex.rb:104:in getc' from c:/ruby/lib/ruby/1.8/irb/slex.rb:206:inmatch_io’
from c:/ruby/lib/ruby/1.8/irb/slex.rb:76:in match' ... 8 levels... from c:/ruby/lib/ruby/1.8/irb.rb:70:instart’
from c:/ruby/lib/ruby/1.8/irb.rb:69:in catch' from c:/ruby/lib/ruby/1.8/irb.rb:69:instart’
from c:/ruby/bin/irb.bat:20
Terminate batch job (Y/N)? y
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.