2015-10-14 53 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序列很少使用)。有些終端具有可設置的餘量 - 回車受到這些影響。 –