ncursesを使用するのはどうですか? また、接続している特定の端末タイプなどに合わせてテキストをフォーマットする方法を理解するのにも役立ちます。
Python バインディングが提供するgetkey()関数を使用して、さまざまなキーの修飾子を見つけることができます。KEY_SR
また、Shift + 矢印キーには、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)
あなたはそれで遊ぶかもしれません。getkey()のソースを見ると、基本的にgetch
とkeyname
curses 関数の組み合わせであることがわかります。