[R] cat(), Rgui, and support for carriage return \r...

Duncan Murdoch murdoch at stats.uwo.ca
Sun Mar 19 17:32:12 CET 2006


On 3/18/2006 2:39 PM, Duncan Murdoch wrote:
> On 3/17/2006 9:44 AM, Jeffrey Racine wrote:
>> Hi, and thanks in advance for your time.
>>
>> Background - I am working on a package and wish to have a routine's
>> progress reported. The routine can take some time, and I would like to
>> inform the user about the routine's progress. I have scoured the
>> archives but to no avail, so would like to solicit input from this list.
>>
>> I am successfully using
>>
>> cat("\rBootstrap replication ", i, " of ", boot.num,)
>> flush.console() # To flush stdout on windows systems
>>
>> which works as expected on *NIX systems and using Rterm under windows.
>> However, under Rgui the carriage return \r is ignored, and I certainly
>> don't want to use the newline escape sequence \n. Under Rgui it appears
>> as
>>
>> Bootstrap replication 1 of 399Bootstrap replication 2 of 399Bootstrap...
>>
>> but I want it to function properly if at all possible.
>>
>> My question is simply whether there is a portable way to implement this
>> so that it works regardless of the R platform the user may be working
>> on?
>>
>> Many thanks for any/all suggestions.
> 
> I've just been looking at the source code for this.  I think it will be 
> relatively easy to make \r in Rgui do a destructive CR (i.e. it will 
> return to the start of the line, but clear any existing characters). 
> I'll play around a bit and then do that for R-devel.

Oops, this was a bad idea.  I did commit the change for a while, but 
have reverted it now.

It seems that the help system displays help pages by writing CR LF at 
the end of each line; the CR is \r, and my change above caused it to 
wipe out the line it had just written.  The help pages ended up 
completely blank.

I may look into supporting \r as a non-destructive CR, but that's 
harder, because it means low-level changes to the console display. 
Right now it only writes to the end of the text buffer; this would mean 
it would sometimes write to a spot before the end.  I don't think it 
would be impossible to do, but it will take more time than I have right now.

Duncan Murdoch




More information about the R-help mailing list