Я предпринял приключение по созданию сравнительно небольшой RPG для командной строки, чтобы напрячь мои вновь обретенные мускулы Python, но я уже столкнулся с головоломкой. Я использую эту реализацию getch ():
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
key = sys.stdin.read(3)
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
У меня есть key
для чтения 3 символов для захвата клавиш со стрелками. Up, например, читается как ESC[A
; с помощью этого метода я могу использовать key[2]
, чтобы определить, была ли нажата клавиша со стрелкой и какая. Все хорошо, за исключением того, что я также хотел бы захватывать все виды других ключей; q
для журнала квестов, wasd
для движения (нажатием стрелок в разных порядках будет метод атаки) и многие другие. Проблема сразу проясняется; если getch()
возвращает только один символ, функциональность стрелки полностью теряется.
Я обдумываю переосмысление системы стрел, если нет простого решения, но я почти уверен, что так и должно быть. Конечно, я мало что знаю о том, что происходит в tty
, но я где-то читал, что если вы читаете только 1 символ, лишние символы из нажатия на стрелку сохраняются в буфере. Как я могу получить доступ к указанному буферу? В качестве альтернативы, есть ли какой-нибудь умный способ сказать stdin
ожидать ввода переменной длины?
Заранее благодарю за любую помощь.