From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: [bug] :eval header argument ignored in the #+call: block Date: Fri, 20 Jan 2012 11:46:09 -0700 Message-ID: <87ehuunqoy.fsf@gmx.com> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([140.186.70.92]:33442) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RoJip-0002jo-IL for emacs-orgmode@gnu.org; Fri, 20 Jan 2012 14:02:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RoJik-0001wQ-Uu for emacs-orgmode@gnu.org; Fri, 20 Jan 2012 14:01:59 -0500 Received: from mailout-us.gmx.com ([74.208.5.67]:37544) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1RoJik-0001wG-PX for emacs-orgmode@gnu.org; Fri, 20 Jan 2012 14:01:54 -0500 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Leo Alekseyev Cc: Emacs orgmode --=-=-= Content-Type: text/plain Leo Alekseyev writes: > Suppose I have a code block foo, and I want to call it several times > in my org file. However, foo may be a slow function, and so any time > I evaluate buffer non-interactively (e.g. HTML export) I want to > enable only one out of many calls to :foo > > The following doesn't work, but I think it should, since the #+call: > line should run foo with the header argument :eval no-export > > #+NAME: foo > #+BEGIN_SRC R :var turn_on_output="FALSE" > if(turn_on_output) { X11() } > #+END_SRC > > #+CALL: foo[:eval no-export](turn_on_output="TRUE") ## this STILL > evaluates on export > Thanks for sharing this example. It indicated two bugs in the existing code base. I've just pushed up fixes for both bugs, the attached Org-mode file can be used to confirm that this is now working. --=-=-= Content-Type: text/x-org Content-Disposition: inline; filename=foo.org #+Title: foo A buffer in which we want =foo= to be run when called interactively from /any/ call line, but to only be run by a single call line on export. Ensure this works by executing this buffer to html while tracking =foo-called.times= with =tail -f /tmp/foo-called.times=. #+NAME: foo #+BEGIN_SRC sh :var id="foo" echo "called by $id at $(date +%s.%N)" |tee -a /tmp/foo-called.times #+END_SRC This will *not* be run on export. #+call: foo[:eval no-export]("bar") This *will* be run on export. #+call: foo("baz") --=-=-= Content-Type: text/plain > > Furthermore, a better solution to the situation I described above > might be to set the :eval no-export header argument in the source > block definition, and then over-ride it in the one #+call line that I > want to run during export. Unfortunately, it doesn't seem that this > is currently possible. > The reason this second option doesn't work is that there is currently no positive argument to the :eval header argument, rather it can only be used to *inhibit* evaluation. Cheers, > > --Leo > -- Eric Schulte http://cs.unm.edu/~eschulte/ --=-=-=--