特にPythonで、ローカルシステムが矢印キーに割り当てる値を見つけようとしています。これを行うには、次のスクリプトを使用しています。
import sys,tty,termios
class _Getch:
def __call__(self):
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def get():
inkey = _Getch()
while(1):
k=inkey()
if k!='':break
print 'you pressed', ord(k)
def main():
for i in range(0,25):
get()
if __name__=='__main__':
main()
次に、スクリプトを実行し、UP DOWN RIGHT LEFT を押すと、次の出力が得られました。
$ python getchar.py
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68
これは、矢印キーを押すたびに get() の 3 つのインスタンスが使用されるため、矢印キーが何らかの形式のトリプル (27-91-6x) としてシステムに登録されていることを示唆しているため、異常です。比較すると、a、b、c と CTRL-C を押すと、次のようになります。
you pressed 97
you pressed 98
you pressed 99
you pressed 3
矢印キーの値がトリプルとして保存されているように見える理由を誰かに説明できますか? どうしてこうなの?これはすべてのプラットフォームで同じですか? (私は Debian Linux を使用しています。) そうでない場合、矢印キーの値をどのように保存すればよいですか?
ここでの最終目標は、矢印キーを正しく認識し、押された矢印キーに応じて機能を実行する必要があるプログラムを作成しようとしていることです。