NCurses и ESC,ALT ключи

У меня проблема с NCurses... мне нужно обработать все ключи, такие как Esc, Alt+F и т. Д. Проблема в том, что коды похожи... т.е.


Esc - 27


Alt+A - 27 65


В качестве примера приведен двойной код для комбинации Alt+[key], который похож на клавишу Esc... Есть идеи, как с этим справиться?

4 ответа

Решение

Решено:

  1. Используйте режим noecho или timeout
  2. Проверьте код 27 (ALT или ESC)... если пройдете:
  3. попробуйте прочитать другой код
  4. если другой код ERR, тогда.. у вас есть ключ ESC, иначе у вас есть ALT+ другой код

Вот пример для Python:

key = self.screen.getch()
if key == ord('q'): # quit
    go = False
elif key == 27: # Esc or Alt
    # Don't wait for another key
    # If it was Alt then curses has already sent the other key
    # otherwise -1 is sent (Escape)
    self.screen.nodelay(True)
    n = self.screen.getch()
    if n == -1:
        # Escape was pressed
        go = False
    # Return to delay
    self.screen.nodelay(False)

если вы не хотите поддерживать пользователей, которые нажимают escape, а затем другую клавишу (я думаю, пережиток старых терминалов эпохи терминалов vt100), и просто хотите реагировать на физические клавиши на клавиатуре pc 101, вы можете установить это в начале вашего (c) кода:

ЗАДЕРЖКА = 10;

справочная страница более подробно объясняет, что происходит: https://man7.org/linux/man-pages/man3/curs_variables.3x.html

затем используйте keyname(), чтобы получить легко читаемое человеком имя strcmp для того, что было нажато, например ^c для управления +c. См. Как получить Ctrl, Shift или Alt с помощью getch() ncurses?

Другие вопросы по тегам