Sebastien Vauban writes: > Rainer M Krug wrote: >> Charles Berry writes: >>> Rainer M Krug krugs.de> writes: >>>> >>>> when exporting the fillowing org file, I get an endless loop of >>>> evaluations. >>>> >>>> --8<---------------cut here---------------start------------->8--- >>>> #+PROPERTY: header-args :exports both >>>> #+PROPERTY: header-args+ :results output >>>> * The bug >>>> This file create an (possibly endless?) loop during export >>>> * here exports both >>>> #+begin_src R >>>> cat(13+14) >>>> #+end_src >>>> >>>> * and here only code >>>> :PROPERTIES: >>>> :header-args+: exports code >>>> :END: >>>> #+begin_src R >>>> paste(13+14) >>>> #+end_src >>>> --8<---------------cut here---------------end--------------->8--- >>> >>> Add this to the end of your example and run the src block: >>> >>> #+BEGIN_SRC emacs-lisp :results pp >>> (org-entry-get (point) "header-args" t) >>> #+END_SRC >>> >>> #+RESULTS: >>> : ":exports both :results output exports code" >> >> Very useful function - I think I will use it quite often! I would have >> seen the problem immediately - the missing : > > FWIW, `C-c C-v I' (or `C-c C-v C-I') would show you: Now this is really helpful. Brilliant. Now If I do this in the faulty block, I get: ,---- | Lang: R | Header Arguments: | :cache no | :exports both | :hlines no | :noweb no | :results code exports output replace | :session none | :tangle no `---- And I can see if something is wrong. One question remains: to debug wrong header arguments, it would be useful to see, in addition to the resulting header arguments, where they came from, especially the header-args argument would be useful to see. So I added the line --8<---------------cut here---------------start------------->8--- (when header-args (funcall printf "header-args: %s\n" header-args)) --8<---------------cut here---------------end--------------->8--- to the output, and was surprised: Using the second code block in my example, I get (line breaks and bold added for readability): ,---- | Lang: R | header-args: ((:comments . ) (:shebang . ) (:cache . no) (:padline . ) | (:noweb . no) (:tangle . no) (:exports . both) (:results . code exports | output replace) (:hlines . no) (:session . none)) | Header Arguments: | :cache no | :exports both | :hlines no | :noweb no | :results code exports output replace | :session none | :tangle no `---- 1) I thought that header-args is simply a string, but it already seems to be a list? 2) Am I right in assuming that when I use header-args, the string passed is parsed and then either set as header-args or, if using header-args+, added to the header-args? 3) even when using +, the previously set value *of the header argument* is overwritten? 4) if an invalid string is given, where is it appended? Woulddn't it make sense to only accept values of the pattern =:headerArgument string= to avoid these kind of user errors? 5) Is there any way in getting, in this function, the same output (header-args) as from the code block suggested by Charles: --8<---------------cut here---------------start------------->8--- #+BEGIN_SRC emacs-lisp :results pp (org-entry-get (point) "header-args" t) #+END_SRC #+RESULTS: : ":exports both :results output exports code" --8<---------------cut here---------------end--------------->8--- Thanks, Rainer > > Lang: R > Header Arguments: > :cache no > :exports code > :hlines no > :noweb no > :results replace > :session none > :tangle no > exports code > > Best regards, > Seb -- Rainer M. Krug email: Rainerkrugsde PGP: 0x0F52F982