如何在进入 Ruby 后覆盖当前控制台行?
How to overwrite the current console line after gets in 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
回车符 return 应该覆盖控制台中的当前行,但 却没有,并且“>”进入新行。
我尝试从字符串(库colorize
)中删除颜色并写入$stdout.flush
或STDOUT.flush
following this topic运气不好.
然后我意识到 如果我删除 gets
指令。
如何在gets
之后覆盖当前行?
覆盖当前行(打印 "\r"
)与 gets
一起工作得很好。问题是,gets
读取一行直到(包括)换行符。因此,是您按下 ENTER
,将光标移动到下一行。然后下一行,已经是空的,由 \r
.
倒回
在常规模式下无法移动到上一行。(请参阅评论)您需要使用较低级别的终端window 访问。 curses
是一个流行的图书馆。 Ruby 有它的绑定。我建议您从这个博客 post(及其后续文章)开始:http://graysoftinc.com/terminal-tricks/random-access-terminal
我有这段代码:
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
回车符 return 应该覆盖控制台中的当前行,但 却没有,并且“>”进入新行。
我尝试从字符串(库colorize
)中删除颜色并写入$stdout.flush
或STDOUT.flush
following this topic运气不好.
然后我意识到 如果我删除 gets
指令。
如何在gets
之后覆盖当前行?
覆盖当前行(打印 "\r"
)与 gets
一起工作得很好。问题是,gets
读取一行直到(包括)换行符。因此,是您按下 ENTER
,将光标移动到下一行。然后下一行,已经是空的,由 \r
.
在常规模式下无法移动到上一行。(请参阅评论)您需要使用较低级别的终端window 访问。 curses
是一个流行的图书馆。 Ruby 有它的绑定。我建议您从这个博客 post(及其后续文章)开始:http://graysoftinc.com/terminal-tricks/random-access-terminal