2015-10-14 17 views
-1

比方说,我的终端是宽4列,我打印4个X S和一个回车符: R不清晰超过一行

$ print "XXXX\r" 
$ yesyeshellothiscanbeanythig 

\r返回行的开始,以便后面的字符(yesyeshellothiscanbeanythig)可以覆盖它们。

我想要达到超出一条线的效果:当我有五个X和最后一个X包装到第二行时,我想\r将两条线都移回去。

我想要什么:

$ print "XXXX\r" 
$ overwrite 

我能得到什么:

$ print "XXXXX\r" 
XXXX 
$ overwrite 

第4个X s的打印,然后第五X被包裹在一个换行符,然后只有\r进入第二行的开始处,将第一行保留完整的4 X

是否有一种独立于平台的方式让\r回到第一行的开头?我认为\r将走到第一行的开始,如果行是通过包装而不是明确的\n产生的。

+0

你的问题似乎是一个简单的理解(不一定意味着它很容易解决),但你写它,如果它是非常困难的。 – sawa

+0

你的线路如何/为什么要被包裹? –

+0

在“我想要的”下面,为什么你要有'$ print“XXXX \ r”'? – sawa

回答

2

\r根据定义,只将光标移动到当前行的开始位置。有没有将光标移动到其他行的标准方式 - 不同的平台有不同的方式来做到这一点。在Windows上,您将使用Win32控制台API来移动光标,并且在Linux/UNIX/OS X上,您将使用ANSI转义代码来移动光标。例如,Ruby Curses库可以做一些这样的事情,但我不确定它在Windows上是如何工作的。

+0

我不确定这是否记录在某处,但当写入控制台时,当前版本的MRI支持Windows上的一些ANSI转义码。 – cremno

+0

实际上,ECMA-48(相关标准)中的“按定义”比这更复杂。它将光标(活动演示文稿位置)转到同一行上的* home *位置。初始位置是可配置的(尽管给定的SLH序列很少使用)。有些终端具有可设置的余量 - 回车受到这些影响。 –