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 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 > [[alternative HTML version deleted]] _______________________________________________ R-SIG-Mac mailing list R-SIG-Mac@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-mac