R_Interactive {was '[Rd] stdout == 'Terminal' or 'File'}
On Wed, 12 May 2004, Simon Urbanek wrote:
while the topic is on, something remotely related although the same: On May 12, 2004, at 10:04 AM, Prof Brian Ripley wrote:
interactive() is as good a test as we have, and I think if a better test is required in the interactive case, the user should be asked.
There may be a little problem in the current sources (talking unix for
now) - R sets the interactive flag like this:
system.c@248: R_Interactive = isatty(0);
Unfortunately right after this there comes:
if (!R_Interactive && SaveAction != SA_SAVE && SaveAction != SA_NOSAVE)
R_Suicide("you must specify `--save', `--no-save' or `--vanilla'");
Now speaking of embedded R - the above leaves (afaik) no way of telling
R to use interactive mode before this suicide attempt if stdout is no
tty (it doesn't have to if the embedding app provides its own
Read/WriteConsole etc.). Any thoughts on this? (btw: aqua uses a hack
to circumvent this... whenever aqua needs a hack it may be worth
thinking about something more general ;))
Not R per se, but the Unix front-end in Rf_initialize_R, which is a hack
from the terminal-like Unix front-end. As in the comment
/* On Unix the console is a file; we just use stdio to write on it */
An embedding application can (and probably should) set argv when it calls
Rf_initEmbeddedR, or it can call its own version of Rf_initialize_R (which
is what happens under Windows).
BTW, this is in the process of being broken up (and aqua and gnome
support moved to Rmain.c) so it is a good time for a better solution.
OTOH, it is not particularly good to break the API of which
Rf_initialize_R is probably considered part.
I agree with your comment about aqua, but then those of us not using Raqua
are often unaware of the hacks which have been used.
Brian
Brian D. Ripley, ripley@stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595