我想在基于curses的python程序中提供键绑定。理想的解决方案是在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库提供这种功能,或者比手动为所有内容提供名称更容易实现它?
答案 0 :(得分:4)
所有非特殊键的代码都是字符的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)
答案 1 :(得分:1)
如果你使用libtermkey
,那么它不是使用curses进行输入,而是提供了简单的函数,用于将键结构转换为人类可读字符串和从人类可读字符串转换,只是这种形式。具体来说是函数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绑定;见