Hi list, I'm having trouble tangling an Org file. Basically, if I put a =:tangle= header argument in a =#+PROPERTY= line at the top of the file or in a =:PROPERTIES:= block under a header, it is not picked up and the code blocks to which (I think) it should apply are not tangled. Only when I put a =:tangle= argument at the top of the source block itself is the source block tangled. Is this expected behaviour? Am I doing something wrong? Emacs 26.3, Org 9.3.6. TIA Joost -- Joost Kremers Life has its moments
> On Mar 28, 2020, at 3:00 PM, Joost Kremers <joostkremers@fastmail.fm> wrote: > > Hi list, > > I'm having trouble tangling an Org file. Basically, if I put a =:tangle= header argument in a =#+PROPERTY= line at the top of the file or in a =:PROPERTIES:= block under a header, it is not picked up and the code blocks to which (I think) it should apply are not tangled. Only when I put a =:tangle= argument at the top of the source block itself is the source block tangled. > > Is this expected behaviour? Am I doing something wrong? IIUC what you did, then yes and yes. This is the accepted idiom: #+PROPERTY: header-args :tangle yes Remember that if you add or change that line you need to update with C-c C-c or `org-mode-restart'. Maybe you omitted the `header-args'. That used to be correct syntax but was obsoleted some time back. See (info "(org) Using Header Arguments") HTH, Chuck > > Emacs 26.3, Org 9.3.6. > > TIA > > Joost > > > -- > Joost Kremers > Life has its moments > >
On Sun, Mar 29 2020, Berry, Charles via General discussions about
Org-mode. wrote:
>> On Mar 28, 2020, at 3:00 PM, Joost Kremers
>> <joostkremers@fastmail.fm> wrote:
>> Is this expected behaviour? Am I doing something wrong?
>
> IIUC what you did, then yes and yes.
>
> This is the accepted idiom:
>
> #+PROPERTY: header-args :tangle yes
I have tried:
#+begin_example
#+PROPERTY: header-args:python :tangle yes :dir
/home/joost/tmp/dlpy
#+end_example
which AFAICT is the syntax shown in the info node you mentioned. I
have also tried a file name instead of =yes=, both with and
without quotes, but it doesn't work.
What I really want is to have a property block with the =:tangle=
arg under each top-level header, like so:
#+begin_example
:PROPERTIES:
:header-args:python: :tangle out1.py
:END:
#+begin_example
because I want the code below each top-level header to be tangled
to a separate file. Again, AFAICT this is the syntax described in
the info manual.
Hmm, experimenting a bit more I find that if I leave out the
=python= part, it works:
#+begin_example
:PROPERTIES:
:header-args: :tangle out1.py
:END:
#+begin_example
But the info manual gives this example:
#+begin_example
:PROPERTIES:
:header-args:clojure: :session *clojure-1*
:END:
#+begin_example
The same is true for the #+PROPERTY block at the top of the file:
leave out the =python=, it works. Isn't it possible to restrict
tangling to source blocks of a particular language? (Or, more
specifically what I want: to specify different tangling targets
for different language? I wanted to have both python and bash code
blocks under one header and have them tangled to different
files...)
Joost
--
Joost Kremers
Life has its moments
> On Mar 29, 2020, at 1:13 PM, Joost Kremers <joostkremers@fastmail.fm> wrote: > > > On Sun, Mar 29 2020, Berry, Charles via General discussions about Org-mode. wrote: >>> On Mar 28, 2020, at 3:00 PM, Joost Kremers <joostkremers@fastmail.fm> wrote: >>> Is this expected behaviour? Am I doing something wrong? >> >> IIUC what you did, then yes and yes. >> >> This is the accepted idiom: >> >> #+PROPERTY: header-args :tangle yes > What we really need is an ECM rather than snippets of code. This ECM works for me: #+begin_src org ,* try python :PROPERTIES: :header-args:python: :tangle yes :END: ,#+begin_src python "a+b" ,#+end_src #+end_src producing a file of the same name with the .py extension with one line containing "a+b". I am on release Org mode version 9.3.6 (release_9.3.6-442-g97f0f1 ), but this also work on release_9.3-34-g2eee3c HTH, Chuck p.s. `M-x org-lint' may reveal some issues with your file that might not be obvious to the eye. > I have tried: > > #+begin_example > #+PROPERTY: header-args:python :tangle yes :dir /home/joost/tmp/dlpy > #+end_example > > which AFAICT is the syntax shown in the info node you mentioned. I have also tried a file name instead of =yes=, both with and without quotes, but it doesn't work. > > What I really want is to have a property block with the =:tangle= arg under each top-level header, like so: > > #+begin_example > :PROPERTIES: > :header-args:python: :tangle out1.py > :END: > #+begin_example > > because I want the code below each top-level header to be tangled to a separate file. Again, AFAICT this is the syntax described in the info manual. > > Hmm, experimenting a bit more I find that if I leave out the =python= part, it works: > > #+begin_example > :PROPERTIES: > :header-args: :tangle out1.py > :END: > #+begin_example > > But the info manual gives this example: > > #+begin_example > :PROPERTIES: > :header-args:clojure: :session *clojure-1* > :END: > #+begin_example > > The same is true for the #+PROPERTY block at the top of the file: leave out the =python=, it works. Isn't it possible to restrict tangling to source blocks of a particular language? (Or, more specifically what I want: to specify different tangling targets for different language? I wanted to have both python and bash code blocks under one header and have them tangled to different files...) > > Joost > > > -- > Joost Kremers > Life has its moments
On Sun, Mar 29 2020, Berry, Charles via General discussions about
Org-mode. wrote:
> What we really need is an ECM rather than snippets of code.
Yes, my apologies. It seems that having more than one `header-arg`
line doesn't work properly. The following works:
```
* Header 1
:PROPERTIES:
:header-args:python: :tangle out1.py
:header-args:python: :session py1 :results function
:END:
#+begin_src python
a=1
b=2
c=a+b
return c
#+end_src
#+RESULTS:
: 3
```
But if I swap the two `header-args` lines, tangling stops working
and at the same time evaluating the code block doesn't give any
output at all:
```
* Header 1
:PROPERTIES:
:header-args:python: :session py1 :results function
:header-args:python: :tangle out1.py
:END:
#+begin_src python
a=1
b=2
c=a+b
return c
#+end_src
#+RESULTS:
```
With a `#+PROPERTY` line, I can't make it work at all:
```
#+PROPERTY: header-args:python :tangle out.py
#+PROPERTY: header-args:python :results function
* Header 1
#+begin_src python
a=1
b=2
c=a+b
return c
#+end_src
#+RESULTS:
: 3
```
Evaluating the code block works, but tangling doesn't. Reversing
the order of the `#+PROPERTY` lines has no effect in this case.
Looks like a bug, right?
--
Joost Kremers
Life has its moments
On Mon, Mar 30 2020, Joost Kremers wrote:
> Looks like a bug, right?
And while I'm at it, this doesn't work as expected either:
```
#+PROPERTY: header-args :dir /home/joost/tmp/dlpy/
* Header 1
:PROPERTIES:
:header-args:python: :tangle out1.py
:header-args:python: :session py1 :results function
:END:
#+begin_src python
a=1
b=2
c=a+b
return c
#+end_src
```
I would expect that the file `out1.py` is created in the directory
`/home/joost/tmp/dlpy`, but it's created in the same directory as
the Org file.
Are my expectations wrong or is this really a bug?
--
Joost Kremers
Life has its moments
[-- Attachment #1: Type: text/plain, Size: 903 bytes --] Header args overwrite. Change python to python+ to append header args. Please excuse brevity. Sent from tiny pocket computer with non-haptic feedback keyboard. On Sun, Mar 29, 2020, 15:42 Joost Kremers <joostkremers@fastmail.fm> wrote: > > On Mon, Mar 30 2020, Joost Kremers wrote: > > Looks like a bug, right? > > And while I'm at it, this doesn't work as expected either: > > ``` > #+PROPERTY: header-args :dir /home/joost/tmp/dlpy/ > > * Header 1 > :PROPERTIES: > :header-args:python: :tangle out1.py > :header-args:python: :session py1 :results function > :END: > > #+begin_src python > a=1 > b=2 > c=a+b > return c > #+end_src > ``` > > I would expect that the file `out1.py` is created in the directory > `/home/joost/tmp/dlpy`, but it's created in the same directory as > the Org file. > > Are my expectations wrong or is this really a bug? > > > -- > Joost Kremers > Life has its moments > > [-- Attachment #2: Type: text/html, Size: 1352 bytes --]
On Mon, Mar 30 2020, Ken Mankoff wrote:
> Header args overwrite. Change python to python+ to append header
> args.
Are you sure? That's not documented anywhere I can find and it
seems to be belied by the fact that if I put the headers in the
order:
```
:PROPERTIES:
:header-args:python: :tangle out1.py
:header-args:python: :session py1 :results function
:END:
```
everything works as I would expect (the code blocks are tangled to
a file `out1.py` *and* they are evaluated in a python session
`py1`), meaning that *all* header args are picked up.
If I reverse the order and add a `+` sign, like so:
```
:PROPERTIES:
:header-args:python+: :session py1 :results function
:header-args:python+: :tangle out1.py
:END:
```
the code does indeed get tangled, but the `:results` header arg
isn't picked up, because the code block doesn't produce any
output.
For reference, this is my test file:
```
* Header 1
:PROPERTIES:
:header-args:python+: :session py1 :results function
:header-args:python+: :tangle out1.py
:END:
#+begin_src python
a=1
b=2
c=a+b
return c
#+end_src
#+RESULTS:
```
--
Joost Kremers
Life has its moments
Aloha Joost, This link reflects my understanding of how properties accumulate, rather than overwrite: https://org-babel.readthedocs.io/en/latest/header-args/ hth, Tom -- Thomas S. Dye https://tsdye.online/tsdye
> On Mar 30, 2020, at 3:23 PM, Joost Kremers <joostkremers@fastmail.fm> wrote: > [stuff deleted] > > If I reverse the order and add a `+` sign, like so: > > ``` > :PROPERTIES: > :header-args:python+: :session py1 :results function > :header-args:python+: :tangle out1.py > :END: > ``` > > the code does indeed get tangled, but the `:results` header arg isn't picked up, because the code block doesn't produce any output. Not so. `org-babel-view-src-block-info' (C-c C-v C-i with point in the src block below) reports ,---- | Lang: python | Properties: | :header-args nil | :header-args:python :session py1 :results function :tangle out1.py | Header Arguments: | :cache no | :exports code | :hlines no | :noweb no | :results function replace | :session py1 | :tangle out1.py `---- > > For reference, this is my test file: > > ``` > * Header 1 > :PROPERTIES: > :header-args:python+: :session py1 :results function > :header-args:python+: :tangle out1.py > :END: > > #+begin_src python > a=1 > b=2 > c=a+b > return c > #+end_src > > #+RESULTS: > ```
[-- Attachment #1: Type: text/plain, Size: 1635 bytes --] Yes I'm sure. From the link Thomas sent, Any property specification, unless it is postfixed with a `+`, will *reset* the value of that property to its current value. C-c C-v <TAB> (for me, Charles uses C-c C-v C-i) withitn a code block shows you the header args that are set for that block. Useful for debugging. -k. On Mon, Mar 30, 2020 at 3:24 PM Joost Kremers <joostkremers@fastmail.fm> wrote: > > On Mon, Mar 30 2020, Ken Mankoff wrote: > > Header args overwrite. Change python to python+ to append header > > args. > > Are you sure? That's not documented anywhere I can find and it > seems to be belied by the fact that if I put the headers in the > order: > > ``` > :PROPERTIES: > :header-args:python: :tangle out1.py > :header-args:python: :session py1 :results function > :END: > ``` > > everything works as I would expect (the code blocks are tangled to > a file `out1.py` *and* they are evaluated in a python session > `py1`), meaning that *all* header args are picked up. > > If I reverse the order and add a `+` sign, like so: > > ``` > :PROPERTIES: > :header-args:python+: :session py1 :results function > :header-args:python+: :tangle out1.py > :END: > ``` > > the code does indeed get tangled, but the `:results` header arg > isn't picked up, because the code block doesn't produce any > output. > > For reference, this is my test file: > > ``` > * Header 1 > :PROPERTIES: > :header-args:python+: :session py1 :results function > :header-args:python+: :tangle out1.py > :END: > > #+begin_src python > a=1 > b=2 > c=a+b > return c > #+end_src > > #+RESULTS: > ``` > > > -- > Joost Kremers > Life has its moments > [-- Attachment #2: Type: text/html, Size: 2363 bytes --]
On Tue, Mar 31 2020, Ken Mankoff wrote: > Yes I'm sure. From the link Thomas sent, > > Any property specification, unless it is postfixed with a `+`, > will *reset* > the value of that property to its current value. Yes, I realise now I was mistaken. For some reason, I though that `:results function` meant something, which it doesn't. > C-c C-v <TAB> (for me, Charles uses C-c C-v C-i) withitn a code > block shows > you the header args that are set for that block. Useful for > debugging. Yes, that turned out to be very useful. Thanks. Joost -- Joost Kremers Life has its moments
On Tue, Mar 31 2020, Berry, Charles via General discussions about
Org-mode. wrote:
> `org-babel-view-src-block-info' (C-c C-v C-i with point in the
> src block below) reports
I didn't know about that command, it's proven to be very helpful.
Thanks!
Joost
--
Joost Kremers
Life has its moments
Hi Thomas,
Thanks for that link. I really need to go over that document
carefully. :-)
Best,
Joost
On Tue, Mar 31 2020, Thomas S. Dye wrote:
> Aloha Joost,
>
> This link reflects my understanding of how properties
> accumulate, rather than
> overwrite:
> https://org-babel.readthedocs.io/en/latest/header-args/
>
> hth,
> Tom
--
Joost Kremers
Life has its moments