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