如何使用ncurses,它为你做了什么?它还可以帮助您了解如何为您连接的特定终端类型设置文本格式等。
使用python绑定提供的getkey()函数,我可以找出不同键的修饰符。我还发现,对于Shift +方向键,有一个单独的密钥代码,缩写为KEY_SR
,KEY_SF
,上下和KEY_SLEFT
和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)
你可以玩这个。看看source of getkey(),我们发现它基本上是getch
和keyname
curses函数的组合。
我正在使用ncurses。出于某种原因,它无法检测到“Shift + Up”和“Shift + Down”,并且我预测它对于某些键的Ctrl和Alt也会有问题。这意味着我必须以其他方式检测这些按键。 – 2012-07-23 06:17:18
@TheScienceBoy我添加了一个例子和一些对我的回复的引用。我现在看到你的问题在哪里检测到shift + up和shift + down。希望这可以帮助! – 2012-07-24 08:28:54
我在我的系统上尝试了你的解决方案,但是在X11中(为了方便起见,我首先尝试了)没有检测到shift + key和shift + key down(sleft and sright working)。在X11外部的适当控制台中检测到不换档键。 据我了解,这种事情需要Linux中真正的低级别解决方案,这有点令人伤心。人们会认为键盘处理会更容易。 – 2012-10-22 18:20:50