【问题标题】:How to capture a key press in Ruby?如何在 Ruby 中捕获按键?
【发布时间】:2011-09-04 06:34:51
【问题描述】:

在 Ruby 中,我需要一个简单的线程,每次按下某个键时都会运行一些代码。有没有办法做到这一点?

我需要能够捕获 Page UpPage 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

这几乎可行。只有 1 个问题,需要在每次击键后按回车键。我猜这是因为缓冲 IO。

【问题讨论】:

    标签: ruby multithreading keypress


    【解决方案1】:

    您可以使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多