2015-06-27 36 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

相关问题