在一個小的Ruby應用程序中,我希望接受用戶輸入而不必等待回車。我的理解是需要啓用cbreak模式才能使終端直接將用戶輸入提供給腳本。如何在Ruby終端應用程序中使用cbreak模式?
我試着在腳本的頂部簡單地運行x%[cbreak()],但是沒有奏效。我也看到可以使用(n)詛咒來獲得相同的結果,儘管這看起來像是過度殺傷。
有沒有人有關於如何實施這個建議?
感謝
在一個小的Ruby應用程序中,我希望接受用戶輸入而不必等待回車。我的理解是需要啓用cbreak模式才能使終端直接將用戶輸入提供給腳本。如何在Ruby終端應用程序中使用cbreak模式?
我試着在腳本的頂部簡單地運行x%[cbreak()],但是沒有奏效。我也看到可以使用(n)詛咒來獲得相同的結果,儘管這看起來像是過度殺傷。
有沒有人有關於如何實施這個建議?
感謝
一種解決方案是使用shell的read
命令通過%x
。它似乎不適合做一些看起來像Ruby的STDIN應該負責的東西,但它很簡單並且可行。
#! /usr/bin/ruby
puts "Please enter your first initial"
str = %x[read -s -n1 keypress; echo $keypress]
puts "Your first inital is " + str
cbreak
是一個詛咒函數調用,所以%x
絕對不適用(即用於執行shell命令)。 cbreak
在標準curses庫中定義,所以這可能是你最好的選擇。
參見:
http://ruby-doc.org/stdlib/libdoc/curses/rdoc/classes/Curses.html#M000280
編輯:你也可以看看這避免了使用詛咒(我覺得這很難實現)Curses.getch
我誤以爲這是一個bash命令誤解了cbreak。感謝澄清。 – Thomas 2011-01-05 17:47:42