2

我目前正在使用此代码来获取击键,但我缺少例如Shift/Alt键 ,例如Ctrl++ 、Shift++ 、+等。SCtrlShiftAltS

  require 'curses'

  Curses.noecho
  Curses.raw
  Curses.stdscr.keypad(true)
  Curse.nonl

  count = 0
  loop do
    count = (count + 1) % 20
    key = Curses.getch
    break if key == ?\C-c
    Curses.setpos(count,0)
    Curses.addstr("#{key.inspect}     ");
  end

有什么办法可以全部捕获吗?

另外:我如何区分Ctrl+ J/ Ctrl+MCtrl+ Enter/ Enter,它们给出相同的键码(10/ 13)?

4

1 回答 1

6

另外:如何区分 ctrl+j / ctrl+m 和 ctr+enter / enter,它们给出相同的键码 (10/13)

长话短说——你不能。终端几乎肯定会为每个终端产生相同的字节。请阅读

http://www.leonerd.org.uk/hacks/fixterms/

也就是说,如果你觉得特别勇敢,你可以试试我的libtermkey

http://www.leonerd.org.uk/code/libtermkey/

这至少会正确解析诸如Ctrl-arrow. 它(还)没有 Ruby 绑定,但是 Perl 和 Python 的存在表明它应该很容易编写一个。

最后,如果你觉得更勇敢,你可以运行我写的终端pangoterm,它有通用的方法来编码任何任意修改的 Unicode 键,所以它可以区分 Ctrl-m 和 Enter 等...

https://launchpad.net/pangoterm

然而,除此之外,答案仍然是“你不能”。

于 2012-03-19T18:21:46.547 回答