Python:将密钥代码解析为可读(vim-like?)语法

时间:2012-05-26 19:27:46

标签: python vim curses

我想在基于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库提供这种功能,或者比手动为所有内容提供名称更容易实现它?

2 个答案:

答案 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_strfkeytermkey_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