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

gro*_*ser 1 ruby curses

我目前正在使用此代码来捕获按键,但是我缺少例如Shift/ Alt键,例如 Ctrl+ Shift+ SCtrl+ Shift+ 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
Run Code Online (Sandbox Code Playgroud)

有什么办法可以捕获它们吗?

另外:如何区分提供相同键码(/ )的Ctrl+ J/ Ctrl+ MCtrl+ Enter/ ?Enter1013

Leo*_*erd 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

但是,除此之外,答案仍然是“您不能”。