使用ncurses怎么样,它可以为你做这一切?它还可以帮助您确定如何为您连接的特定终端类型设置文本格式等。
使用 python 绑定提供的getkey()函数,我能够找出不同键的修饰符。我还发现对于 Shift+Arrow 键,有一个单独的键代码,缩写为KEY_SR
,KEY_SF
用于 up 和 down 和KEY_SLEFT
and KEY_SRIGHT
。
import curses
import curses.textpad
import curses.ascii
def decodeSuffix(i):
return {
0b110: ( True, True, False),
0b100: ( True, False, True),
0b111: (False, True, True),
0b101: (False, True, False),
0b011: (False, False, True),
}[i]
def test(stdscr):
while True:
k = stdscr.getkey()
if k == "\n":
return
elif k[0] == "k" and len(k) > 1:
i = int(k[-1])
shift, ctrl, alt = decodeSuffix(i)
s = ""
if shift:
s += "shift "
if ctrl:
s += "ctrl "
if alt:
s += "alt "
s += k[1:-1]
stdscr.addstr("{0:40s} {1:08b}\n".format(s, i))
else:
stdscr.addstr("{0}\n".format(k))
pass
curses.wrapper(test)
你可以玩弄那个。查看getkey() 的源码,我们发现它基本上是getch
和keyname
curses 函数的组合。