[R] cat(), Rgui, and support for carriage return \r...
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
>> 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
>> 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
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.
More information about the R-help