Dear Marc and Kasper,

I already know how to test whether the Rcmdr is running under Mac OS X and
to test whether X11 is installed. But AFAICS there is no way for me to run
this code in the Rcmdr package at startup *before* tcltk fails to load -- I
did try to do this, both in .onLoad() and in .onAttach(). 

I thought that I'd made this problem clear in my initial message but
apparently I hadn't. I'd be happy if someone proved me wrong by showing me
another way to intercept the problem on startup of the Rcmdr package, but I
think that the fix has to go into tcltk, as Kasper suggests.

Best,
 John

> -----Original Message-----
> From: Marc Schwartz [mailto:marc_schwa...@me.com]
> Sent: Monday, July 14, 2014 6:33 PM
> To: Kasper Daniel Hansen
> Cc: John Fox; urba...@research.att.com; r-sig-mac@r-project.org
> Subject: Re: [R-SIG-Mac] Mac OS X tcltk/X11 issues
> 
> Kasper,
> 
> Understood. I was not sure if there was someplace in John's startup
> code that might catch it early on before tcltk loads, but that may be
> confounded by the sequence of the package import process as John notes
> below.
> 
> Reading R-exts and the related help files does not make it clear to me
> that there is a window of opportunity to run the check before the
> import occurs, but I would defer to Simon et al on the finer points
> here.
> 
> Regards,
> 
> Marc
> 
> 
> On Jul 14, 2014, at 5:07 PM, Kasper Daniel Hansen
> <kasperdanielhan...@gmail.com> wrote:
> 
> 
>       Basically John is asking for code like this to be included in
> tcltk.
> 
>       Best,
>       Kasper
> 
> 
>       On Mon, Jul 14, 2014 at 11:53 PM, Marc Schwartz
> <marc_schwa...@me.com> wrote:
> 
> 
>               On Jul 14, 2014, at 4:13 PM, John Fox <j...@mcmaster.ca>
> wrote:
> 
>               > Dear Simon and list members,
>               >
>               > As many of you are aware, when X11 isn't installed on Mac
> OS X, loading the
>               > tcltk package produces an error, with a message that many
> users find
>               > cryptic. There was yet another instance of this problem
> reported to the list
>               > today.
>               >
>               > I'm interested in the issue because the Rcmdr package uses
> tcltk and thus
>               > fails to load when X11 is absent. Rcmdr users tend to be
> inexperienced and
>               > so, unless they find their way to the Rcmdr installation
> webpage, where
>               > detailed installation instructions are provided, they tend
> to be stymied by
>               > the problem.
>               >
>               > If I could, I'd intercept the problem by checking
> capabilities()["X11"] in
>               > the Rcmdr .onLoad() or .onAttach() function, but because
> the Rcmdr package
>               > imports the tcltk namespace, the error occurs before these
> startup functions
>               > are executed -- a chicken-and-egg problem.
>               >
>               > It occurs to me that tcltk could fail more gracefully on
> Mac OS X when X11
>               > is absent, perhaps popping up a webpage in a browser with
> instructions and a
>               > link for installing XQuartz. I'd do this myself in the
> Rcmdr package if I
>               > could. Or tcltk could check for the presence of X11 and
not
> try to start it
>               > if it's absent, reporting a warning rather than throwing
an
> error.
>               >
>               > Alternatively, I'd be grateful if someone could suggest
how
> I might detect
>               > the problem in the Rcmdr package before loading fails. The
> only thing that I
>               > could think of was writing a separate RcmdrInstall package
> that bypasses
>               > tcltk, but that would be awkward and would only help users
> who discovered
>               > that RcmdrInstall exists.
>               >
>               > Thanks,
>               > John
> 
> 
> 
>               John,
> 
>               Is there someplace in your startup process where you could
> run code along the lines of:
> 
>               if (grepl("apple", R.version$platform) &
> length(list.files("/opt/X11/bin", pattern = "Xquartz")) == 0) {
>                    cat("X11 is required. Please visit
> http://xquartz.macosforge.org <http://xquartz.macosforge.org/>  to
> download and install Xquartz.")
>                    stop()
>               }
> 
> 
>               The above code will check to see if the user is running R on
> OS X and also if the Xquartz binary is present in the default location.
> 
>               Not sure if this is helpful.
> 
>               Regards,
> 
>               Marc Schwartz
> 
> 
>               _______________________________________________
>               R-SIG-Mac mailing list
>               R-SIG-Mac@r-project.org
>               https://stat.ethz.ch/mailman/listinfo/r-sig-mac
> 
> 
>

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to