在Ruby脚本中捕获箭头键事件

时间:2012-01-02 14:15:14

标签: ruby console-application

我在Ruby中编写一个小脚本,从命令行读取输入。

我想抓住上,下,左,右箭头信号。我想在终端做点什么。 (当你向上箭头时,你有上一个命令...) 我怎么能这样做?

1 个答案:

答案 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