我在Ruby中编写一个小脚本,从命令行读取输入。
我想抓住上,下,左,右箭头信号。我想在终端做点什么。 (当你向上箭头时,你有上一个命令...) 我怎么能这样做?
答案 0 :(得分:2)
要执行完全无缓冲的输入,您可以使用termios
之类的内容。但是,您必须手动解释箭头键序列。
如果您可以使用中间层来完成历史记录,我建议使用 GNU readline (如前所述)或 RawLine 库来自H3RALD:
http://www.h3rald.com/rawline/
http://www.h3rald.com/articles/real-world-rawline-usage/
termios
的无缓冲输入示例:
require 'rubygems'
require 'termios'
def with_unbuffered_input
old_attrs = Termios.tcgetattr(STDOUT)
new_attrs = old_attrs.dup
new_attrs.lflag &= ~Termios::ECHO
new_attrs.lflag &= ~Termios::ICANON
Termios::tcsetattr(STDOUT, Termios::TCSANOW, new_attrs)
yield
ensure
Termios::tcsetattr(STDOUT, Termios::TCSANOW, old_attrs)
end
with_unbuffered_input do
10.times {
c = STDIN.getc
puts "Got #{c}"
}
end