加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何捕获Ruby中的按键?

发布时间:2020-12-17 01:45:40 所属栏目:百科 来源:网络整理
导读:在 Ruby中,我需要一个简单的线程,每次按下一个键时都会运行一些代码.有没有办法做到这一点? 我需要能够捕获Page Up和Page Down 这是我尝试过的: #!/usr/bin/env rubyThread.new do while c = STDIN.getc puts c.chr endendloop do puts Time.new sleep 0.7
在 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.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读