14

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

4

2 回答 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)
于 2012-05-29T15:13:27.960 回答
1

与其使用 curses 进行输入,不如使用libtermkeythen 它提供了简单的函数来将键结构与人类可读的字符串相互转换,就这种形式。特别是函数termkey_strfkeytermkey_strpkey

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

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

这是一个 C 库,但它确实有一个 Python 绑定;看

https://github.com/temoto/ctypes_libtermkey

于 2012-06-19T13:21:36.663 回答