2016-07-30 7 views
0

ユーザにESCキーまたは他のキーを押すように求めます。 ESCを押すと、すべての操作が停止します。 ENTER(またはその他のキー)を押すと、追加の操作が実行されます。Ruby:gets.chomp 1 keypress

Enterキーを押しても正常に動作しますが、が実際にEnterキーを押すのを待ちます。非常に友好的ではありません。

ユーザーが1回キーを押した後に続行する方法はありますか?

puts "Press Enter to continue or ESC to quit..." 
decision = gets.chomp 

if decision != "^[" 
    then puts "do this stuff" 
else 
    puts "bye" 
end 

答えて

1

あなたがしていることをほとんど理解できないと思います。まず、使用しているOSによって異なります。私は、すべてのオペレーティングシステムに適用可能な「標準」メカニズムがないことを認識しています。

2つの文字を含む、二次文字列との比較、'^''['は決してESCに対するチェックと同じです。

最後に、getsが押されていない限り、入力をバッファしています。 1つのチャートを読むために必要なものはIO#getcです。ここで

は、UNIXコンソール用のコードを働いている:

puts "Press Enter to continue or ESC to quit..." 
begin 
    system("stty raw -echo") 
    decision = STDIN.getc 
ensure 
    system("stty -raw echo") 
end 

if decision.ord != 27 
    puts "do this stuff" 
else 
    puts "bye" 
end 
+0

あなたは正しいです。まだ学んでいる。あなたの推論を精緻化してくれてありがとう、それは "なぜ"を知るために多くの助けになる。 –

+0

いつでもようこそ。 – mudasobwa