L
Lloyd Zusman
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.
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.