Как получить клавиши Shift + X / Alt + X в Curses? - PullRequest
1 голос
/ 13 января 2011

В настоящее время я использую этот код для захвата нажатий клавиш, но мне не хватает, например, Shift / Alt клавиш типа Ctrl + Shift + S , Ctrl + 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

Можно ли как-то их всех перехватить?

Также: как я могу различить Ctrl + J / Ctrl + M из Ctrl + Введите / Введите , которые дают одинаковые коды клавиш (10/ 13)

1 Ответ

5 голосов
/ 19 марта 2012

также: как отличить ctrl + j / ctrl + m от ctr + ввод / ввод, которые дают одинаковые коды клавиш (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

Однакокроме них, ответ остается «вы не можете».

...