如何在Curses中获得Shift + X / Alt + X键?

时间:2011-01-13 20:12:12

标签: ruby curses

我目前正在使用此代码来抓取击键,但我遗漏了 Shift / Alt 键就好 Ctrl + Shift + S Ctrl + Shift + ↑< / kbd>, Alt + S 等。

  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 <区分 Ctrl + J / Ctrl + M / kbd> + 输入 / 输入,它们提供相同的密钥代码(10 / 13)?

1 个答案:

答案 0 :(得分:5)

  

另外:如何区分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

然而,除了这些,答案仍然是“你不能”。