ghostwheel
2010-Sep-07 18:21 UTC
[Rd] what is the best way for an external interface to interact with graphics, libraries
Another message about the R to TeXmacs interface. 1. Graphics The TeXmacs interface allows the user to directly insert graphics into the session. Since I am not very familiar with programming for R, I implemented the interaction with graphics in a very primitive way. It was two modes of working: with X11, and without (for example when working remotely through ssh without forwarding X11). In both cases the user has to invoke a command, v(), in order to insert the current graph into the buffer at the current place. With X11, the way it works is that when v() is invoked I call recordPlot(), then open a postscript file, then replayPlot(), and then close the postscript file and insert it into the session. Without X11, I open a postscript file ahead of time, then when v() is called, I close it, and insert it into the session, and then open a new postscript file. Obviously quite primitive.I think ideally would be if everything was transparent to the user - the user does a plot, and the plot is inserted into the buffer right away, and later, updates to the same plot update the original plot where it is. But to be able to do that I need to be able to generate the postscript file of the current plot, and be notified somehow whenever the plot changes. Is all that possible? Is there a better way to implement this all? 2. Libraries A remotely related question is this: the interface with TeXmacs generates menus that depend on the currently loaded libraries. I'd like to be able to update the menus whenever a new library is loaded. Is there a possibility to have a function called whenever this happens? Or would it be advisable to change the global 'library' function? -- View this message in context: http://r.789695.n4.nabble.com/what-is-the-best-way-for-an-external-interface-to-interact-with-graphics-libraries-tp2530208p2530208.html Sent from the R devel mailing list archive at Nabble.com.
Simon Urbanek
2010-Sep-07 18:34 UTC
[Rd] what is the best way for an external interface to interact with graphics, libraries
On Sep 7, 2010, at 2:21 PM, ghostwheel wrote:> > Another message about the R to TeXmacs interface. > > 1. Graphics > The TeXmacs interface allows the user to directly insert graphics into the > session. > > Since I am not very familiar with programming for R, I implemented the > interaction with graphics in a very primitive way. It was two modes of > working: with X11, and without (for example when working remotely through > ssh without forwarding X11). > > In both cases the user has to invoke a command, v(), in order to insert the > current graph into the buffer at the current place. > > With X11, the way it works is that when v() is invoked I call recordPlot(), > then open a postscript file, then replayPlot(), and then close the > postscript file and insert it into the session. > > Without X11, I open a postscript file ahead of time, then when v() is > called, I close it, and insert it into the session, and then open a new > postscript file. > > Obviously quite primitive.I think ideally would be if everything was > transparent to the user - the user does a plot, and the plot is inserted > into the buffer right away, and later, updates to the same plot update the > original plot where it is. But to be able to do that I need to be able to > generate the postscript file of the current plot, and be notified somehow > whenever the plot changes. > > Is all that possible? Is there a better way to implement this all? >I don't know the mechanics of the actual "inserting" in TeXmac but it would be trivial to simply create a copy of the plot as EPS (or whatever is needed) at the time of insertion. See dev.copy2eps() for a function that does exactly that.> 2. Libraries > > A remotely related question is this: the interface with TeXmacs generates > menus that depend on the currently loaded libraries.Libraries are not "loaded" (see .libPath() for handling libraries) - but chances are that you meant packages...> I'd like to be able to > update the menus whenever a new library is loaded. Is there a possibility to > have a function called whenever this happens? Or would it be advisable to > change the global 'library' function? >I would strongly advise against the latter. A reasonably simple way would be to check the search path - if it changed a package has been loaded. A natural place to do such check would be in a top-level task handler for example. Cheers, Simon