在获取Ruby之后如何覆盖当前的控制台行?

时间:2015-06-27 16:13:26

标签: ruby carriage-return gets

我有这段代码:

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.flush following this topic 但没有运气

然后我意识到,如果我删除 gets 指令就可以了。

如何在gets之后覆盖当前行?

1 个答案:

答案 0 :(得分:3)

覆盖当前行(打印 public static void main(String args[]) { Outer obj=new Outer(); Outer.Inner inner = obj.new Outer.Inner(); } )与"\r"一起正常工作。问题是,gets读取一行直到(并包括)换行符。因此,按gets,将光标移动到下一行是你。接下来,已经为空的行由ENTER重新启动。

在常规模式下无法移至上一行。(请参阅注释)您需要使用较低级别的终端窗口访问。 \r是一个受欢迎的图书馆。 Ruby有绑定。我建议你从这篇博文(及其后续内容)开始:http://graysoftinc.com/terminal-tricks/random-access-terminal