Search code examples
emacsorg-mode

What can cause org-auto-tangle to result nil for all noweb code block evaluations


I'm using literate programming for some configuration files and would like to have some parts from elisp code block evaluations. I tried evaluating named code blocks with :noweb tangle but they always results nil and I do not see any errors in the *Messages*. Here's a simplified hello world example and the results I got.

Org file

#+title: Hello
#+PROPERTY: header-args :tangle hello.txt :cache no :exports none
#+auto_tangle: t

#+name: hello-world-output
#+begin_src emacs-lisp :tangle no :eval no-export :results output
(print "Hello world")
#+end_src

#+name: hello-world-value
#+begin_src emacs-lisp :tangle no :eval no-export :results value
"Hello world"
#+end_src

#+begin_src text :noweb tangle
<<hello-world-output>> -> <<hello-world-output()>>
<<hello-world-value>> -> <<hello-world-value()>>
#+end_src

Tangled results

(print "Hello world") -> nil
"Hello world" -> nil

I also checked that org-link-elisp-confirm-function and org-confirm-babel-evaluate both have nil value, so they should not be preventing evaluation.

EDIT: I forgot to mention that I used org-auto-tangle. Issue doesn't occur when calling org-bable-tangle directly.


Solution

  • I had the same issue and below solved it for me.

    According to the code of org-auto-tangle the code will not be evaluated by default. In order to have the code auto evaluated you need to add your org file to the org-auto-tangle-babel-safelist. I've posted the definition of the variable and a link to the README with an example of how to set the variable.

    (defvar org-auto-tangle-babel-safelist '()
      "List of full path of files for which code blocks need to be evaluated.
    By default, code blocks are not evaluated during the auto-tangle to avoid
    possible code execution from unstrusted source. To enable code blocks evaluation
    for a specific file, add its full path to this list.")
    

    https://github.com/yilkalargaw/org-auto-tangle#babel-auto-tangle-safelist