emacs-orgmode
[Top][All Lists]
Advanced

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

[Orgmode] Re: [BABEL] "unset" :var definitions for subtree


From: Dan Davison
Subject: [Orgmode] Re: [BABEL] "unset" :var definitions for subtree
Date: Sun, 13 Feb 2011 01:21:32 +0000
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (darwin)

"Eric Schulte" <address@hidden> writes:

> [...]
>>> It seems that what you want to do can be described as disabling
>>> inheritance of the :var properties for a specific block. 
>>
>> Agreed - that would solve my problem.
>>
>>> So I'm suggesting that it may be more parsimonious to do this with
>>> the existing Org inheritance mechanisms than to introduce new babel
>>> header arguments specifically for this purpose.
>>
>> Agreed here.
>>
>
> If this is possible, then I'm all for it, however I do not think that it
> is currently possible to "disinherit" specific properties.  Note: do to
> the way babel collects properties, I don't think that temporarily
> changing the value of `org-use-property-inheritance' will be sufficient.
>
> [...]
>>>>
>>>> So how can I now define multiple variables?
>>> 
>>> I don't know :)
>>
>> Could Eric help here?
>>
>>> 
>>>> in a properties drawer multiple :var does not work? Could you give a
>>>> simple example how to define variables A and B?
>>> 
>>> Yes, I've always been a bit uncomfortable with this. As Eric says, Org
>>> properties are supposed to be a bit like a hash, with unique keys.
>>
>> So based on this, I can only define a single variable per properties drawer?
>>
>
> I'm not sure how this should be solved.  Would it be possible/desirable
> to allow multiple settings of the same key in Org-mode properties?  That
> seems like it could be a destructive change across all of Org-mode.

> Maybe we could extend the :var header argument to support the following
> syntax...
>
> #+begin_src emacs-lisp :var A=1 B=3
>   ;; code
> #+end_src
>
> or
>
> ** two vars in a properties block
>    :PROPERTIES:
>    :var:      test1=7 test2=8
>    :END:
>
> That shouldn't be overly difficult, and should solve our requirements.

Yes, that looks good. 

In the following Org file

---------------------------------------
#+property: :var a=1 b=2

* h1
  :PROPERTIES:
  :var: c=3
  :END:
** h11
   :PROPERTIES:
   :var: d=4 e=5 b=7
   :END:

#+begin_src sh :var f=6
# code here
#+end_src
---------------------------------------

if we follow programming languages by analogy then the behavior we
should aim for is for variables a,b,c,d,e to all be set in the src
block, with b having the value 7.

I've made a start on a patch to do that -- it involves treating :var
differently from other header args. Whereas normal property inheritance
searches up the tree until the specified property is encountered, my
patch searches up the tree to the root, collecting all the :var
assignments encountered.

So perhaps we should go for a solution involving both the new ":var a=1
b=2" syntax (to allow multiple :var in the same block), and the
pluralistic inheritance described above (to allow :var to be collected
from all levels in the hierarchy).

Dan



>
> Sound good? -- Eric
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> address@hidden
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode



reply via email to

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