Myles English <mylesengl...@gmail.com> writes: > Thanks for your answer Eric. Recent changes as per > http://thread.gmane.org/gmane.emacs.orgmode/35396 > means that this no longer works.
Thanks for bringing this up Myles. > To recap: what I would like to do is to #+call an R source > block, passing a filename, and have it write a plot to that file and > also insert a link to that file in the org file. Any ideas? > > Here is what I have tried: > > #+source: foo() > #+begin_src R :file bar.png :results graphics > plot(1,1) > #+end_src > > > #+call: foo[:file baz.png]() > > #+results: foo[:file baz.png]() > : baz.png > > baz.png contains a plot, but no file link is inserted. Yes you need :results file, so the line should be #+call: foo[:file baz.png]() :results file Explanation: In simple single-block usage, :file automatically sets :results file. But here :file in square brackets is passed to block foo, so the #+call line needs its own :results file. (And in fact :file would be wrong; see below). > > #+call: foo() > > #+results: foo() > : bar.png > > bar.png contains a plot, but no file link is inserted. Yep. Same as above, except here you haven't overridden the file name. > #+call: foo[:file biff.png]() :file biff.png > > #+results: foo[:file biff.png]() > [[file:biff.png]] > > a file link is inserted but file biff.png contains 'biff.png' Right, this one's kind of instructive for understanding this stuff. Here, foo returns its file name as a string, so "biff.png". The #+call line has been told to send its results to file with the :file argument, and it takes that literally, writing the string "biff.png" to its output file. So if what we want is a file containing graphics, we are not going to want :file on the #+call line. What we want is to interpret the string as a file name, and that's what :results file does. > > #+call: foo[:file pow.png]() :file pow.png :results graphics > > #+results: foo[:file pow.png]() > [[file:pow.png]] > > a file link is inserted but file pow.png contains 'pow.png' Same as above. #+call receives a string from foo; it can't turn that string into the desired graphics. In fact, :results graphics currently only has any effect on an R block (i.e. at an R block, or passed to an R block inside [ ... ]). Dan > > Thanks, > > Myles > > > On Wed, 05 Jan 2011 23:28:00 -0700 > "Eric Schulte" <schulte.e...@gmail.com> wrote: > >> Hi Myles, >> >> Currently I believe the best option is the solution you posted below, >> the file name is repeated because both the code block and the call >> line need to know the file name to create the file and the link >> respectively. >> >> Cheers -- Eric >> >> Myles English <mylesengl...@gmail.com> writes: >> >> > Myles English <mylesenglish <at> gmail.com> writes: >> > >> >> #+source: foo() >> >> #+begin_src R :file bar.png >> >> plot(1,1) >> >> #+end_src >> > >> > This works but I have to repeat the filename: >> > >> > #+call: foo[:file baz.png]() :file baz.png >> > >> > #+results: foo[:file baz.png]() >> > [[file:baz.png]] >> > >> > Myles >> > >> > >> > _______________________________________________ >> > Emacs-orgmode mailing list >> > Please use `Reply All' to send replies to the list. >> > Emacs-orgmode@gnu.org >> > http://lists.gnu.org/mailman/listinfo/emacs-orgmode > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode