Hi, a slight enhancement:
#+begin_src emacs-lisp (defun tj/src-block-interpreter (src-block contents) "Interpret SRC-BLOCK element as Org syntax. CONTENTS is nil." (let ((lang (org-element-property :language src-block)) (switches (org-element-property :switches src-block)) (params (org-element-property :parameters src-block)) (headers (org-element-property :header src-block)) (value (let ((val (org-element-property :value src-block))) (cond ((or org-src-preserve-indentation (org-element-property :preserve-indent src-block)) val) ((zerop org-edit-src-content-indentation) val) (t (let ((ind (make-string org-edit-src-content-indentation ?\s))) (replace-regexp-in-string "\\(^\\)[ \t]*\\S-" ind val nil nil 1)))))) packed-headers) (concat (format "%s#+BEGIN_SRC%s\n" (progn (while headers (setq packed-headers (concat (format "#+HEADER: %s\n" (pop headers)) packed-headers))) (or packed-headers "")) (concat (and lang (concat " " lang)) (and switches (concat " " switches)) (and params (concat " " params)))) (org-escape-code-in-string value) ;; (save-match-data ;; (if (looking-at "^$") "" "\n")) "#+END_SRC"))) #+end_src #+results: : tj/src-block-interpreter Parse this src-block (with point at beg of block): ,---- | M-: (setq ptree (org-element-at-point)) `---- #+header: :results raw #+begin_src emacs-lisp (message "hello world") #+end_src #+results: hello world Then evaluate #+begin_src emacs-lisp (org-element-src-block-interpreter ptree nil) #+end_src #+results: : #+BEGIN_SRC emacs-lisp : (message "hello world") : #+END_SRC #+begin_src emacs-lisp (tj/src-block-interpreter ptree nil) #+end_src #+results: : #+HEADER: :results raw : #+BEGIN_SRC emacs-lisp : (message "hello world") : #+END_SRC -- cheers, Thorsten