I'm using org-babel to automate a few tasks and I'd like to define a few variables that are common to several code blocks as sub-tree properties. It works when I have only one variable, where I can use --8<---------------cut here---------------start------------->8--- * Heading :PROPERTY: :var: variable1="value1" :END: #+begin_src python :results output print variable1 #+end_src #+results: : value1 --8<---------------cut here---------------end--------------->8--- Is it possible to set multiples variables in this way? I tried things like --8<---------------cut here---------------start------------->8--- :PROPERTY: :var: variable1="value1" variable2="value2" :END: :PROPERTY: :var: variable1="value1",variable2="value2" :END: :PROPERTY: :variable1: "value1" :variable2: "value2" :END: --8<---------------cut here---------------end--------------->8--- but none of them worked. -- Darlan Cavalcante
Unfortunately org-mode properties only allow a single entry for any given key, so you can only specify one variable using properties. However the following workaround does exist. *** alternative :PROPERTIES: :var: vars=variables :END: #+tblname: variables | var1 | 1 | | var2 | 2 | #+begin_src python print vars[0][1] print vars[1][1] #+end_src Best -- Eric Darlan Cavalcante Moreira <darcamo@gmail.com> writes: > I'm using org-babel to automate a few tasks and I'd like to define a few > variables that are common to several code blocks as sub-tree properties. > > It works when I have only one variable, where I can use > * Heading > :PROPERTY: > :var: variable1="value1" > :END: > #+begin_src python :results output > print variable1 > #+end_src > > #+results: > : value1 > > Is it possible to set multiples variables in this way? > I tried things like > :PROPERTY: > :var: variable1="value1" variable2="value2" > :END: > > :PROPERTY: > :var: variable1="value1",variable2="value2" > :END: > > :PROPERTY: > :variable1: "value1" > :variable2: "value2" > :END: > but none of them worked. > > > -- > Darlan Cavalcante > -- Eric Schulte http://cs.unm.edu/~eschulte/
Hi, Eric,
Just curious: What about the org-entry--multivalued-property functions
mentioned in "Using the properties API"?
Is anybody using multivalued properties for anything?
Yours,
Christian
On 6/21/11 10:17 PM, Eric Schulte wrote:
> Unfortunately org-mode properties only allow a single entry for any
> given key, so you can only specify one variable using properties.
>
> However the following workaround does exist.
>
> *** alternative
> :PROPERTIES:
> :var: vars=variables
> :END:
>
> #+tblname: variables
> | var1 | 1 |
> | var2 | 2 |
>
> #+begin_src python
> print vars[0][1]
> print vars[1][1]
> #+end_src
>
> Best -- Eric
>
> Darlan Cavalcante Moreira<darcamo@gmail.com> writes:
>
>> I'm using org-babel to automate a few tasks and I'd like to define a few
>> variables that are common to several code blocks as sub-tree properties.
>>
>> It works when I have only one variable, where I can use
>> * Heading
>> :PROPERTY:
>> :var: variable1="value1"
>> :END:
>> #+begin_src python :results output
>> print variable1
>> #+end_src
>>
>> #+results:
>> : value1
>>
>> Is it possible to set multiples variables in this way?
>> I tried things like
>> :PROPERTY:
>> :var: variable1="value1" variable2="value2"
>> :END:
>>
>> :PROPERTY:
>> :var: variable1="value1",variable2="value2"
>> :END:
>>
>> :PROPERTY:
>> :variable1: "value1"
>> :variable2: "value2"
>> :END:
>> but none of them worked.
>>
>>
>> --
>> Darlan Cavalcante
>>
>
Hi Christian, That's the first I've heard of that variable? If you do get something working with multivalued properties please do share. Cheers -- Eric Christian Moe <mail@christianmoe.com> writes: > Hi, Eric, > > Just curious: What about the org-entry--multivalued-property functions > mentioned in "Using the properties API"? > > Is anybody using multivalued properties for anything? > > Yours, > Christian > > > On 6/21/11 10:17 PM, Eric Schulte wrote: >> Unfortunately org-mode properties only allow a single entry for any >> given key, so you can only specify one variable using properties. >> >> However the following workaround does exist. >> >> *** alternative >> :PROPERTIES: >> :var: vars=variables >> :END: >> >> #+tblname: variables >> | var1 | 1 | >> | var2 | 2 | >> >> #+begin_src python >> print vars[0][1] >> print vars[1][1] >> #+end_src >> >> Best -- Eric >> >> Darlan Cavalcante Moreira<darcamo@gmail.com> writes: >> >>> I'm using org-babel to automate a few tasks and I'd like to define a few >>> variables that are common to several code blocks as sub-tree properties. >>> >>> It works when I have only one variable, where I can use >>> * Heading >>> :PROPERTY: >>> :var: variable1="value1" >>> :END: >>> #+begin_src python :results output >>> print variable1 >>> #+end_src >>> >>> #+results: >>> : value1 >>> >>> Is it possible to set multiples variables in this way? >>> I tried things like >>> :PROPERTY: >>> :var: variable1="value1" variable2="value2" >>> :END: >>> >>> :PROPERTY: >>> :var: variable1="value1",variable2="value2" >>> :END: >>> >>> :PROPERTY: >>> :variable1: "value1" >>> :variable2: "value2" >>> :END: >>> but none of them worked. >>> >>> >>> -- >>> Darlan Cavalcante >>> >> > -- Eric Schulte http://cs.unm.edu/~eschulte/
Thanks Eric,
I'll minimize the need of this by using "#+babel: var=something" for
variables that are common to many blocks.
The tip with the table is a good one also.
--
Darlan Cavalcante
At Tue, 21 Jun 2011 13:17:17 -0700,
Eric Schulte wrote:
>
> Unfortunately org-mode properties only allow a single entry for any
> given key, so you can only specify one variable using properties.
>
> However the following workaround does exist.
>
> *** alternative
> :PROPERTIES:
> :var: vars=variables
> :END:
>
> #+tblname: variables
> | var1 | 1 |
> | var2 | 2 |
>
> #+begin_src python
> print vars[0][1]
> print vars[1][1]
> #+end_src
>
> Best -- Eric
>
> Darlan Cavalcante Moreira <darcamo@gmail.com> writes:
>
> > I'm using org-babel to automate a few tasks and I'd like to define a few
> > variables that are common to several code blocks as sub-tree properties.
> >
> > It works when I have only one variable, where I can use
> > * Heading
> > :PROPERTY:
> > :var: variable1="value1"
> > :END:
> > #+begin_src python :results output
> > print variable1
> > #+end_src
> >
> > #+results:
> > : value1
> >
> > Is it possible to set multiples variables in this way?
> > I tried things like
> > :PROPERTY:
> > :var: variable1="value1" variable2="value2"
> > :END:
> >
> > :PROPERTY:
> > :var: variable1="value1",variable2="value2"
> > :END:
> >
> > :PROPERTY:
> > :variable1: "value1"
> > :variable2: "value2"
> > :END:
> > but none of them worked.
> >
> >
> > --
> > Darlan Cavalcante
> >
>
> --
> Eric Schulte
> http://cs.unm.edu/~eschulte/
Hi again, I was referring to these functions: - org-entry-put-multivalued-property - org-entry-get-multivalued-property - org-entry-add-to-multivalued-property - org-entry-remove-from-multivalued-property - org-entry-member-in-multivalued-property described here: http://orgmode.org/manual/Using-the-property-API.html I've found a few discussions: - http://comments.gmane.org/gmane.emacs.orgmode/33457 - http://lists.gnu.org/archive/html/emacs-orgmode/2010-02/msg00251.html I don't have anything working with them, as such,[1] and I was curious if anyone did. They don't currently seem to be integrated into completion, search functions, Babel, and so on, which would limit their usefulness (though searching can be done with regexps). And I think implementing wider support for them would run into a problem with distinguishing between properties that are meant to be multivalued, or and properties that just contain a single value which happens to contain spaces. But handling multiple var=value expressions in a :var: property for Babel, as Darlan asked about, might perhaps be doable...? Stuff might break, though. Yours, Christian [1] I do have a small research database with some "multivalued" properties in it. For queries, I use your org-collector and regular expression matching against properties with multiple values. The multivalued-properties functions didn't really come into it, except that knowing they were there made me go ahead and put multiple values in one property. (As it turned out, that wasn't a very good design choice.) On 6/21/11 11:03 PM, Eric Schulte wrote: > Hi Christian, > > That's the first I've heard of that variable? If you do get something > working with multivalued properties please do share. > > Cheers -- Eric > > Christian Moe<mail@christianmoe.com> writes: > >> Hi, Eric, >> >> Just curious: What about the org-entry--multivalued-property functions >> mentioned in "Using the properties API"? >> >> Is anybody using multivalued properties for anything? >> >> Yours, >> Christian >> >> >> On 6/21/11 10:17 PM, Eric Schulte wrote: >>> Unfortunately org-mode properties only allow a single entry for any >>> given key, so you can only specify one variable using properties. >>> >>> However the following workaround does exist. >>> >>> *** alternative >>> :PROPERTIES: >>> :var: vars=variables >>> :END: >>> >>> #+tblname: variables >>> | var1 | 1 | >>> | var2 | 2 | >>> >>> #+begin_src python >>> print vars[0][1] >>> print vars[1][1] >>> #+end_src >>> >>> Best -- Eric >>> >>> Darlan Cavalcante Moreira<darcamo@gmail.com> writes: >>> >>>> I'm using org-babel to automate a few tasks and I'd like to define a few >>>> variables that are common to several code blocks as sub-tree properties. >>>> >>>> It works when I have only one variable, where I can use >>>> * Heading >>>> :PROPERTY: >>>> :var: variable1="value1" >>>> :END: >>>> #+begin_src python :results output >>>> print variable1 >>>> #+end_src >>>> >>>> #+results: >>>> : value1 >>>> >>>> Is it possible to set multiples variables in this way? >>>> I tried things like >>>> :PROPERTY: >>>> :var: variable1="value1" variable2="value2" >>>> :END: >>>> >>>> :PROPERTY: >>>> :var: variable1="value1",variable2="value2" >>>> :END: >>>> >>>> :PROPERTY: >>>> :variable1: "value1" >>>> :variable2: "value2" >>>> :END: >>>> but none of them worked. >>>> >>>> >>>> -- >>>> Darlan Cavalcante >>>> >>> >> >
One of the things I tried (that didn't work, otherwise I would not have
sent any e-mail) was
:PROPERTY:
:var: variable1="value1" :var variable2="value2"
:END:
I thought that maybe babel would just ask org what is the value of :var:,
put ":var" before it, and include this in the block header. Therefore I
would get the effect of adding
":var variable1="value1" :var variable2="value2""
in the block header and it could work.
However, even if this method had worked It would not be flexible. One of
the nice things about properties is inheritance. I would like to define
"general variables" as properties in level-1 headings and define more
specific variables in the sub-headings as necessary. However, if babel
always use :var: as the property then defining a variable in a subheading
will overwrite the upper level variable.
The best option in my use-case-scenario would be some name scheme to
identify variable definitions for org-babel. For instance
--8<---------------cut here---------------start------------->8---
:PROPERTY:
:ob-someVariable: "some string maybe with\nline breaks"
:ob-someOtherVariable: 123456
:END:
--8<---------------cut here---------------end--------------->8---
would make the variables "someVariable" and "someOtherVariable" known to
org-babel.
--
Darlan Cavalcante
At Wed, 22 Jun 2011 20:27:00 +0200,
Christian Moe <mail@christianmoe.com> wrote:
>
> Hi again,
>
> I was referring to these functions:
> - org-entry-put-multivalued-property
> - org-entry-get-multivalued-property
> - org-entry-add-to-multivalued-property
> - org-entry-remove-from-multivalued-property
> - org-entry-member-in-multivalued-property
> described here:
> http://orgmode.org/manual/Using-the-property-API.html
>
> I've found a few discussions:
> - http://comments.gmane.org/gmane.emacs.orgmode/33457
> - http://lists.gnu.org/archive/html/emacs-orgmode/2010-02/msg00251.html
>
> I don't have anything working with them, as such,[1] and I was curious
> if anyone did. They don't currently seem to be integrated into
> completion, search functions, Babel, and so on, which would limit
> their usefulness (though searching can be done with regexps). And I
> think implementing wider support for them would run into a problem
> with distinguishing between properties that are meant to be
> multivalued, or and properties that just contain a single value which
> happens to contain spaces.
>
> But handling multiple var=value expressions in a :var: property for
> Babel, as Darlan asked about, might perhaps be doable...? Stuff might
> break, though.
>
> Yours,
> Christian
>
>
> [1] I do have a small research database with some "multivalued"
> properties in it. For queries, I use your org-collector and regular
> expression matching against properties with multiple values. The
> multivalued-properties functions didn't really come into it, except
> that knowing they were there made me go ahead and put multiple values
> in one property. (As it turned out, that wasn't a very good design
> choice.)
>
> On 6/21/11 11:03 PM, Eric Schulte wrote:
> > Hi Christian,
> >
> > That's the first I've heard of that variable? If you do get something
> > working with multivalued properties please do share.
> >
> > Cheers -- Eric
> >
> > Christian Moe<mail@christianmoe.com> writes:
> >
> >> Hi, Eric,
> >>
> >> Just curious: What about the org-entry--multivalued-property functions
> >> mentioned in "Using the properties API"?
> >>
> >> Is anybody using multivalued properties for anything?
> >>
> >> Yours,
> >> Christian
> >>
> >>
> >> On 6/21/11 10:17 PM, Eric Schulte wrote:
> >>> Unfortunately org-mode properties only allow a single entry for any
> >>> given key, so you can only specify one variable using properties.
> >>>
> >>> However the following workaround does exist.
> >>>
> >>> *** alternative
> >>> :PROPERTIES:
> >>> :var: vars=variables
> >>> :END:
> >>>
> >>> #+tblname: variables
> >>> | var1 | 1 |
> >>> | var2 | 2 |
> >>>
> >>> #+begin_src python
> >>> print vars[0][1]
> >>> print vars[1][1]
> >>> #+end_src
> >>>
> >>> Best -- Eric
> >>>
> >>> Darlan Cavalcante Moreira<darcamo@gmail.com> writes:
> >>>
> >>>> I'm using org-babel to automate a few tasks and I'd like to define a few
> >>>> variables that are common to several code blocks as sub-tree properties.
> >>>>
> >>>> It works when I have only one variable, where I can use
> >>>> * Heading
> >>>> :PROPERTY:
> >>>> :var: variable1="value1"
> >>>> :END:
> >>>> #+begin_src python :results output
> >>>> print variable1
> >>>> #+end_src
> >>>>
> >>>> #+results:
> >>>> : value1
> >>>>
> >>>> Is it possible to set multiples variables in this way?
> >>>> I tried things like
> >>>> :PROPERTY:
> >>>> :var: variable1="value1" variable2="value2"
> >>>> :END:
> >>>>
> >>>> :PROPERTY:
> >>>> :var: variable1="value1",variable2="value2"
> >>>> :END:
> >>>>
> >>>> :PROPERTY:
> >>>> :variable1: "value1"
> >>>> :variable2: "value2"
> >>>> :END:
> >>>> but none of them worked.
> >>>>
> >>>>
> >>>> --
> >>>> Darlan Cavalcante
> >>>>
> >>>
> >>
> >
>
>
Hi Christian, I took a look at these functions, while they do seem to work they don't provide for any inheritance from higher-level subtrees. I think this is a deal-breaker for use resolving header arguments as inheritance is generally more useful than multiple values. Thanks for pointing these out, at some point I do think that it may be worth taking a look at how Org-mode resolves properties generally. Cheers -- Eric Christian Moe <mail@christianmoe.com> writes: > Hi again, > > I was referring to these functions: > - org-entry-put-multivalued-property > - org-entry-get-multivalued-property > - org-entry-add-to-multivalued-property > - org-entry-remove-from-multivalued-property > - org-entry-member-in-multivalued-property > described here: > http://orgmode.org/manual/Using-the-property-API.html > > I've found a few discussions: > - http://comments.gmane.org/gmane.emacs.orgmode/33457 > - http://lists.gnu.org/archive/html/emacs-orgmode/2010-02/msg00251.html > > I don't have anything working with them, as such,[1] and I was curious > if anyone did. They don't currently seem to be integrated into > completion, search functions, Babel, and so on, which would limit > their usefulness (though searching can be done with regexps). And I > think implementing wider support for them would run into a problem > with distinguishing between properties that are meant to be > multivalued, or and properties that just contain a single value which > happens to contain spaces. > > But handling multiple var=value expressions in a :var: property for > Babel, as Darlan asked about, might perhaps be doable...? Stuff might > break, though. > > Yours, > Christian > > > [1] I do have a small research database with some "multivalued" > properties in it. For queries, I use your org-collector and regular > expression matching against properties with multiple values. The > multivalued-properties functions didn't really come into it, except > that knowing they were there made me go ahead and put multiple values > in one property. (As it turned out, that wasn't a very good design > choice.) > > On 6/21/11 11:03 PM, Eric Schulte wrote: >> Hi Christian, >> >> That's the first I've heard of that variable? If you do get something >> working with multivalued properties please do share. >> >> Cheers -- Eric >> >> Christian Moe<mail@christianmoe.com> writes: >> >>> Hi, Eric, >>> >>> Just curious: What about the org-entry--multivalued-property functions >>> mentioned in "Using the properties API"? >>> >>> Is anybody using multivalued properties for anything? >>> >>> Yours, >>> Christian >>> >>> >>> On 6/21/11 10:17 PM, Eric Schulte wrote: >>>> Unfortunately org-mode properties only allow a single entry for any >>>> given key, so you can only specify one variable using properties. >>>> >>>> However the following workaround does exist. >>>> >>>> *** alternative >>>> :PROPERTIES: >>>> :var: vars=variables >>>> :END: >>>> >>>> #+tblname: variables >>>> | var1 | 1 | >>>> | var2 | 2 | >>>> >>>> #+begin_src python >>>> print vars[0][1] >>>> print vars[1][1] >>>> #+end_src >>>> >>>> Best -- Eric >>>> >>>> Darlan Cavalcante Moreira<darcamo@gmail.com> writes: >>>> >>>>> I'm using org-babel to automate a few tasks and I'd like to define a few >>>>> variables that are common to several code blocks as sub-tree properties. >>>>> >>>>> It works when I have only one variable, where I can use >>>>> * Heading >>>>> :PROPERTY: >>>>> :var: variable1="value1" >>>>> :END: >>>>> #+begin_src python :results output >>>>> print variable1 >>>>> #+end_src >>>>> >>>>> #+results: >>>>> : value1 >>>>> >>>>> Is it possible to set multiples variables in this way? >>>>> I tried things like >>>>> :PROPERTY: >>>>> :var: variable1="value1" variable2="value2" >>>>> :END: >>>>> >>>>> :PROPERTY: >>>>> :var: variable1="value1",variable2="value2" >>>>> :END: >>>>> >>>>> :PROPERTY: >>>>> :variable1: "value1" >>>>> :variable2: "value2" >>>>> :END: >>>>> but none of them worked. >>>>> >>>>> >>>>> -- >>>>> Darlan Cavalcante >>>>> >>>> >>> >> > -- Eric Schulte http://cs.unm.edu/~eschulte/
I think that a solution more integrated with the rest of Org-mode's property handling would be preferable. That is to say, there should be a way to collect multiple value for a property in Org-mode, and Babel should simply make use of the more general facility. This doesn't exist yet, but I'd rather wait for the general Org solution than push through a temporary Babel-specific solution. Cheers -- Eric Darlan Cavalcante Moreira <darcamo@gmail.com> writes: > One of the things I tried (that didn't work, otherwise I would not have > sent any e-mail) was > :PROPERTY: > :var: variable1="value1" :var variable2="value2" > :END: > > I thought that maybe babel would just ask org what is the value of :var:, > put ":var" before it, and include this in the block header. Therefore I > would get the effect of adding > ":var variable1="value1" :var variable2="value2"" > in the block header and it could work. > > However, even if this method had worked It would not be flexible. One of > the nice things about properties is inheritance. I would like to define > "general variables" as properties in level-1 headings and define more > specific variables in the sub-headings as necessary. However, if babel > always use :var: as the property then defining a variable in a subheading > will overwrite the upper level variable. > > The best option in my use-case-scenario would be some name scheme to > identify variable definitions for org-babel. For instance > :PROPERTY: > :ob-someVariable: "some string maybe with\nline breaks" > :ob-someOtherVariable: 123456 > :END: > would make the variables "someVariable" and "someOtherVariable" known to > org-babel. > > -- > Darlan Cavalcante > > At Wed, 22 Jun 2011 20:27:00 +0200, > Christian Moe <mail@christianmoe.com> wrote: >> >> Hi again, >> >> I was referring to these functions: >> - org-entry-put-multivalued-property >> - org-entry-get-multivalued-property >> - org-entry-add-to-multivalued-property >> - org-entry-remove-from-multivalued-property >> - org-entry-member-in-multivalued-property >> described here: >> http://orgmode.org/manual/Using-the-property-API.html >> >> I've found a few discussions: >> - http://comments.gmane.org/gmane.emacs.orgmode/33457 >> - http://lists.gnu.org/archive/html/emacs-orgmode/2010-02/msg00251.html >> >> I don't have anything working with them, as such,[1] and I was curious >> if anyone did. They don't currently seem to be integrated into >> completion, search functions, Babel, and so on, which would limit >> their usefulness (though searching can be done with regexps). And I >> think implementing wider support for them would run into a problem >> with distinguishing between properties that are meant to be >> multivalued, or and properties that just contain a single value which >> happens to contain spaces. >> >> But handling multiple var=value expressions in a :var: property for >> Babel, as Darlan asked about, might perhaps be doable...? Stuff might >> break, though. >> >> Yours, >> Christian >> >> >> [1] I do have a small research database with some "multivalued" >> properties in it. For queries, I use your org-collector and regular >> expression matching against properties with multiple values. The >> multivalued-properties functions didn't really come into it, except >> that knowing they were there made me go ahead and put multiple values >> in one property. (As it turned out, that wasn't a very good design >> choice.) >> >> On 6/21/11 11:03 PM, Eric Schulte wrote: >> > Hi Christian, >> > >> > That's the first I've heard of that variable? If you do get something >> > working with multivalued properties please do share. >> > >> > Cheers -- Eric >> > >> > Christian Moe<mail@christianmoe.com> writes: >> > >> >> Hi, Eric, >> >> >> >> Just curious: What about the org-entry--multivalued-property functions >> >> mentioned in "Using the properties API"? >> >> >> >> Is anybody using multivalued properties for anything? >> >> >> >> Yours, >> >> Christian >> >> >> >> >> >> On 6/21/11 10:17 PM, Eric Schulte wrote: >> >>> Unfortunately org-mode properties only allow a single entry for any >> >>> given key, so you can only specify one variable using properties. >> >>> >> >>> However the following workaround does exist. >> >>> >> >>> *** alternative >> >>> :PROPERTIES: >> >>> :var: vars=variables >> >>> :END: >> >>> >> >>> #+tblname: variables >> >>> | var1 | 1 | >> >>> | var2 | 2 | >> >>> >> >>> #+begin_src python >> >>> print vars[0][1] >> >>> print vars[1][1] >> >>> #+end_src >> >>> >> >>> Best -- Eric >> >>> >> >>> Darlan Cavalcante Moreira<darcamo@gmail.com> writes: >> >>> >> >>>> I'm using org-babel to automate a few tasks and I'd like to define a few >> >>>> variables that are common to several code blocks as sub-tree properties. >> >>>> >> >>>> It works when I have only one variable, where I can use >> >>>> * Heading >> >>>> :PROPERTY: >> >>>> :var: variable1="value1" >> >>>> :END: >> >>>> #+begin_src python :results output >> >>>> print variable1 >> >>>> #+end_src >> >>>> >> >>>> #+results: >> >>>> : value1 >> >>>> >> >>>> Is it possible to set multiples variables in this way? >> >>>> I tried things like >> >>>> :PROPERTY: >> >>>> :var: variable1="value1" variable2="value2" >> >>>> :END: >> >>>> >> >>>> :PROPERTY: >> >>>> :var: variable1="value1",variable2="value2" >> >>>> :END: >> >>>> >> >>>> :PROPERTY: >> >>>> :variable1: "value1" >> >>>> :variable2: "value2" >> >>>> :END: >> >>>> but none of them worked. >> >>>> >> >>>> >> >>>> -- >> >>>> Darlan Cavalcante >> >>>> >> >>> >> >> >> > >> >> -- Eric Schulte http://cs.unm.edu/~eschulte/