2015-06-27 53 views
2

我有這樣一段代碼:如何在獲取Ruby之後覆蓋當前控制檯行?

def wait_for_input regex 
    print "> ".red 
    someInput = gets 

    while (regex =~ someInput).is_a? NilClass do 
    print "\r> ".red 
    someInput = gets 

    STDOUT.flush 
    end 

    someInput 
end 

回車應該覆蓋在控制檯當前行,但反而不和,在新線「>」去。

我試圖從字符串(庫colorize)去除顏色,沒有運氣寫$stdout.flushSTDOUT.flushfollowing this topic

然後我意識到如果刪除gets指令它的工作原理。

如何在gets之後覆蓋當前行?

+0

'.is_a? NilClass' - 爲什麼?只有一個'NilClass'實例,那就是'nil'。如果你想明確表達 - 你不必使用'== nil'或'.nil?'。 – cremno

+0

@cremno因爲根據2.2.0的文檔(http://ruby-doc.org/core-2.2.0/Regexp.html),'=〜'操作符返回nil ...所以使用'.nil ?'會檢查它,謝謝。 – Nomid

回答

3

覆蓋當前行(打印"\r")與gets一起工作得很好。事情是,gets會讀取一行直到(包括)換行符。所以就是你,按ENTER,將光標移動到下一行。然後這下一行已經是空的行會被\r重新綁定。

在常規模式下不能移動到上一行。(請參閱註釋)您需要使用較低級別的終端窗口訪問。 curses是一個流行的圖書館。 Ruby已經綁定了它。我建議你從這篇博客文章開始(並對其進行跟進):http://graysoftinc.com/terminal-tricks/random-access-terminal

+0

好吧,我明白了,我需要向上移動一條線。 – Nomid

+0

@Nomid:添加鏈接 –

+0

謝謝,塞爾吉奧。這是否適用於Windows和Linux終端? – Nomid

相關問題