From: Lloyd Zusman Date: 2008-02-13T01:29:15+09:00 Subject: Proper way to allow Control-C to interrupt IO#gets What is the canonical method for allowing an IO#gets call to be immediately interrupted by Control-C? This doesn't seem to work as I am expecting. Consider the following bit of ruby code: trap("INT") do puts "got signal INT" end puts "Enter some characters followed by newline:" result = gets puts result When I run this and enter a few characters interspersed with an instance of Control-C, the Control-C doesn't get recognized until after I hit newline. Assuming that this program is in a file called "cctest", here's what happens: % ruby cctest Enter some characters followed by newline: [ here I enter AB^CDEFG, where "^C" is Control-C, which doesn't cause the input to be aborted ] ABDEFG <- This is what echos when I'm typing. got signal INT <- This is what echos after I hit newline, DEFG <- ... and this, as well. In other words, the SIGINT resulting from Control-C doesn't get processed at until after I type the newline. I've searched for discussions of this on the net, but I haven't found anything under a "ruby interrupt gets" Google search, because the word "gets" is used so commonly in English in so many other contexts. I know that I can write my own input handler or use something like the HighLine package, but I'm wondering whether there's a way to cause IO#gets to do what I want. By the way, in case this is pertinent ... % ruby --version ruby 1.8.5 (2006-12-25 patchlevel 12) [i686-linux] % uname -mor 2.6.9-022stab078.20-enterprise i686 GNU/Linux Thanks in advance. -- Lloyd Zusman ljz@asfast.com God bless you.