Python: 将curses键码翻译为可读的(类vim)语法

15

我希望在基于curses的Python程序中提供按键绑定。理想解决方案是在getch()周围构建一个抽象层,以可读字符串的形式返回,可能类似于vim的格式。

用Python的方式来说:

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

然后我可以通过在 dict 函数中使用字符串作为键来轻松实现映射。

有没有Python库提供这种功能,或者比手动为每个东西提供名称更容易的方法?


1
我记得看过bpython项目的代码,当时觉得他们处理键盘输入的系统非常不错,使用了curses库,也许值得去了解一下这个项目。虽然我没有更好的答案,但这是一个很好的问题。我也希望能够看到相关的库。 - Nolen Royalty
2个回答

5

所有非特殊键的代码都是字符的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
与其使用 curses 进行输入,不如使用 libtermkey,它提供了将键结构转换为人类可读字符串的简单函数,以及将人类可读字符串转换为键结构的函数,就是这样。具体来说,这些函数是 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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接