emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] evaluation context in call statements


From: Rick Frankel
Subject: Re: [O] evaluation context in call statements
Date: Wed, 26 Jun 2013 10:38:57 -0400
User-agent: Roundcube Webmail/0.9.0

On 2013-06-26 02:29, Achim Gratz wrote:
Eric Schulte writes:
In defense of the existing behavior, I don't see the benefit of calling
a code block with the same arguments from multiple locations and
subsequently littering a file with multiple identical results blocks.

I agree that this didn't make all that much sense in the past, but with
property evaluation and elisp argument evaluation now anchored to the
point of call, the hierarchical position of the call could and (as the
test case from Rick) will be used to distinguish between invocations
with the same arguments.  Since the current way to find the results
doesn't know anything about this, it will generally not do the right
thing anymore.  Note that calls using a session had that property all
the time: multiple calls with the same arguments into the same session
are useful, but Babel would only keep the last result.

Agreed. The only way to know that the arguments are the "same" is to
evaluated them :).

My only thought about a :target header argument is that it would need to
be implemented for other types of code blocks as well, which could lead
to very confusing behavior if we have a named code block with a :target
header argument which differs from the name.

Oh yes, the specification of that would be interesting. I'll try to see
how this "beam the result anywhere" functionality sprang into existence
and what the intended use case was (I expect something to do with
sessions).

I believe the ability to replace named results anywhere was added by
Nicolas in commit 2f2a80fe (quick look at ob-core w/ vc-annotate).

My current suggestion is however to limit the results block search to
the same subtree and stop searching at later #+CALL and #+BEGIN_SRC
line. We could make this conditional on a :[no]clobber argument to keep
compatibility with the current behaviour (clobbering the first result
would be the current and perhaps default behaviour).

These search bounds make sense, but i think this should be the
default behavior. I don't see the current behavior as making
sense---at least to me. At the time (late 2012) I found Nicolases
changes (named results blocks, attributes and captions on the results
block and not the source, etc) confusing. I still find it odd that you
need to evaluate a source block before you can e.g, add a caption or
attributes to the results (previous behavior was that header arguments
on the source block were used for the results in exporting.)

Also, i think a new value for :replace ("original"?) would make more
sense than a new :clobber option.

My vote is for adding #+name support to call lines, and then handling
their results in the same manner as code block results.

I'm not sure what this would entail other than replacing the call with
its arguments with the name of the call in the results line.  But yes,
that'd be a step forward, although you'd have to be careful when copying
calls.

It seems inconsistent to add #+name support to call lines but not the other
block modifiers (#+header :var ..., etc). I think call lines are a
special case, so would be ok with the new :target option.

rick



reply via email to

[Prev in Thread] Current Thread [Next in Thread]