NCurses и ESC,ALT ключи
У меня проблема с NCurses... мне нужно обработать все ключи, такие как Esc, Alt+F и т. Д. Проблема в том, что коды похожи... т.е.
Esc - 27
Alt+A - 27 65
В качестве примера приведен двойной код для комбинации Alt+[key], который похож на клавишу Esc... Есть идеи, как с этим справиться?
4 ответа
Решено:
- Используйте режим noecho или timeout
- Проверьте код 27 (ALT или ESC)... если пройдете:
- попробуйте прочитать другой код
- если другой код 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?
Ты можешь использовать curses.ascii.ESC