On Jul 14, 2014, at 4: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. A possible correction in the above code relative to detecting OS X: if ((Sys.info()["sysname"] == "Darwin") & 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() } I believe that Sys.info()["sysname"] == "Darwin" is preferred for detecting the OS that R is running on versus the OS that it was built upon according to the help files, if I read correctly. This could be important if someone is building R from source versus installing Simon's CRAN binary, I presume. Regards, Marc _______________________________________________ R-SIG-Mac mailing list R-SIG-Mac@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-mac