2009-02-24 27 views
1

我正在使用Ruby製作一個簡單的基於終端的遊戲,我正在試圖想出一種從終端讀取輸入的方式。使用Ruby在stdin上設置非規範模式

到目前爲止,我一直在使用gets,但是我希望遊戲能夠在不需要換行的情況下立即做出反應(所以你不需要按一個鍵,那麼輸入)。

我已經想通了,我需要把終端設置爲非規範模式,我假設我可以通過調用$stdin.ioctl來實現。問題是,我不知道我應該傳遞什麼參數或標誌,文檔和搜索只是導致了有關底層C函數的信息。

任何人都可以告訴我什麼,我應該打電話$stdin.ioctl與?我在OSX Leopard上使用Terminal.app/tcsh。

編輯:這是我最後使用,這要歸功於MarkusQ:

%x{stty -icanon -echo} 
key = STDIN.read(1) 

回答

2

你的問題是紅寶石之外。

最簡單的答案:將您的IO包裝在%x {stty -raw echo}和%x {stty -raw echo}中以使用stty更改模式。

您可能會想要確保退出處理程序確保您退出時退出該模式。

- MarkusQ

+0

你讓我在stty信息的正確軌道上。看了看,發現我需要什麼。謝謝! – Luke 2009-02-25 11:01:27