Python: прописывает коды клавиш для читаемого (vim-like?) Синтаксиса

Я хочу обеспечить привязку клавиш в программе python на основе curses. Идеальное решение было бы иметь слой абстракции вокруг getch(), который дает читаемые строки, возможно, в виде, подобном vim.

В pythonese:

def get_keycomb(wind):
    string = read_keycomb(wind) # read with wind.getch() as needed
    return string # something like '<C-S-a>'

Тогда я мог бы легко реализовать сопоставления, используя строки как ключи в функции dict.

Существует ли библиотека python, обеспечивающая такую ​​функциональность или более простой способ ее достижения, чем ручное предоставление имен для всего?

Ответы

Ответ 1

Кодами для всех неспецифических клавиш являются коды ascii символов, так что часть таблицы легко построить.

char_codes = {chr(i):i for i in range(256)}

Коды всех специальных букв доступны в модулях curses как константы KEY_ *, поэтому мы можем получить их так:

specials_codes = {name[4:]: value for name, value in vars(curses).items()
    if name.startswith('KEY_')}

Таким образом, вы можете создать сопоставление с помощью этого кода:

import curses

mapping = {chr(i):i for i in range(256)}
mapping.update((name[4:], value) for name, value in vars(curses).items()
    if name.startswith('KEY_'))

print(mapping)

Ответ 2

Вместо использования проклятий для ввода, если вы используете libtermkey, то он предоставляет простые функции для преобразования ключевых структур в и из читаемых человеком строк, только в этой форме. В частности, функции termkey_strfkey и termkey_strpkey.

http://www.leonerd.org.uk/code/libtermkey/doc/termkey_strfkey.3.html

http://www.leonerd.org.uk/code/libtermkey/doc/termkey_strpkey.3.html

Это библиотека C, но у нее есть привязка к Python; см

https://github.com/temoto/ctypes_libtermkey