emacs-love / weblorg

Static Site Generator for Emacs
https://emacs.love/weblorg
GNU General Public License v3.0
282 stars 21 forks source link

Support org-babel / org-export #36

Open neuhalje opened 3 years ago

neuhalje commented 3 years ago

As someone who writes about technical topics, I'd like to use org-babel in my blog.

Examples

Table Generation

For example the following snippet is only exported as source block:

#+begin_src emacs-lisp :exports both
'((a b c) (d e f))
#+end_src

Whereas org-export correctly renders the results (output of org-org-export-as-org):

#+begin_src emacs-lisp
'((a b c) (d e f))
#+end_src

#+results: 
| a | b | c |
| d | e | f |

Using call

The following source block is rendered to This is a greeting: . (call is not executed):

#+NAME: greeting
#+begin_src emacs-lisp :exports results :results silent :var name=""
(format "Hello %s, nice to meet you" name)
#+end_src

This is a greeting: call_greeting(name="Emacs").

Whereas org-export correctly renders the results (output of org-org-export-as-org):

This is a greeting: =Hello Emacs, nice to meet you=.

Suggestion

Add a filter that can transform the source, e.g. via org-org-export-as-org.

Things to consider

Calling org-org-export-as-org on each source file during export could get very slow and/or have unexpected consequences (e.g. when the babel code touches the disk).

mrmechko commented 3 years ago

I opened a PR (#35) to resolve #26 using org-org-export-as-org. Referencing here because the slowness and/or unexpected consequences you mention are not things I had been considering.

clarete commented 3 years ago

Hi @neuhalje, thank you for opening this issue and for the clear test cases!

Mine didn't work until I added the entry (emacs-lisp . t) to org-babel-load-languages:

(org-babel-do-load-languages
   'org-babel-load-languages
   '((ditaa . t)
     (dot . t)
     (emacs-lisp . t)  ;; I did not have this guy here
     (gnuplot . t)
     (latex . t)
     (plantuml . t)
     (python . t)
     (ruby . t)))

Do you have that in your settings?