如何在Ruby中捕获按键?

3
在Ruby中,我需要一个简单的线程,每当按键时都会运行一些代码。有什么方法可以做到这一点吗?
我需要能够捕获“Page Up”和“Page Down”。
以下是我尝试过的内容:
#!/usr/bin/env ruby

Thread.new do
  while c = STDIN.getc
    puts c.chr
  end
end

loop do
  puts Time.new
  sleep 0.7
end

这几乎是可行的。只有一个问题,每次按键后需要按回车键。我猜这是由于缓冲IO引起的。

1个回答

12
您可以使用curses库来捕获按键输入而无需缓冲。
require 'curses'

Curses.noecho # do not show typed keys
Curses.init_screen
Curses.stdscr.keypad(true) # enable arrow keys (required for pageup/down)

loop do
  case Curses.getch
  when Curses::Key::PPAGE
    Curses.setpos(0,0)
    Curses.addstr("Page Up")
  when Curses::Key::NPAGE
    Curses.setpos(0,0)
    Curses.addstr("Page Dn")
  end
end
关键代码在这里:http://ruby-doc.org/stdlib/libdoc/curses/rdoc/index.html。您可以在github上找到更长的示例:https://github.com/grosser/tic_tac_toe/blob/master/bin/tic_tac_toe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接