Re: [Orgmode] [Update Config] Babel changes -- security updates and final integration push

2010-07-06 Thread Carsten Dominik

Hi Eric,

On Jul 6, 2010, at 3:09 AM, Eric Schulte wrote:


Hi Tom,

Thanks for finding this error, the problem is that org-table is not
being required before the source-code block is run.  As a temporary  
fix

you can put

 (require 'org-table)

somewhere in your configuration.

As a long term solution I would want to talk to Carsten about how best
to ensure that org-table is required when org-babel has been  
required as

I believe it may require some change in the org require tree.

Carsten, do you have any suggestion?  I've tried a couple of  
approaches

but most result in a recursive require error.


You are using only a few entry points from org-table, and I have
just added these to the autoloads.  This fixes the current issue.

The require tree of Org could be better, but this is too complex
an issue for the moment.

- Carsten



Thanks -- Eric

Thomas S. Dye t...@tsdye.com writes:


Hi Eric,

Thanks for all your work integrating Babel into Org-mode.

I've pulled the latest Org-mode and changed my initialization
according to your message.  I also pulled the latest starter-kit,  
so I

think I have all the latest code.

When I try to evaluate this code block I get an error that orgtbl-to-
orgtbl is void.

#+begin_src emacs-lisp
 (list 1 (+ 2 3))
#+end_src

Here is a backtrace:

Debugger entered--Lisp error: (void-function orgtbl-to-orgtbl)
 (orgtbl-to-orgtbl (if (or ... ...) result (list result)) (quote
(:fmt ...)))
 (concat (orgtbl-to-orgtbl (if ... result ...) (quote ...)) \n)
 (insert (concat (orgtbl-to-orgtbl ... ...) \n))
 (cond ((not ...) (insert ...) (goto-char beg) (when ... ...))
((member file result-params) (insert result)) ((member html
result-
params) (insert ...)) ((member latex result-params) (insert ...))
((member code result-params) (insert ...)) ((or ... ...) (save-
excursion ...) (if ... ...)) (t (org-babel-examplize-region
... ... results-switches)))
 (let ((existing-result ...) (results-switches ...) beg end) (when
existing-result (goto-char existing-result) (save-excursion ... ...)
(forward-line 1) (setq beg ...) (cond ... ... ...)) (setq results-
switches (if results-switches ... )) (cond (... ... ... ...)
(... ...) (... ...) (... ...) (... ...) (... ... ...) (t ...)) (setq
end (if ... ... ...)) (when (and indent ... ...) (indent-rigidly beg
end indent)))
 (save-excursion (let (... ... beg end) (when existing-
result ... ... ... ... ...) (setq results-switches ...) (cond
... ... ... ... ... ... ...) (setq end ...) (when ... ...)))
 (if (and result-params (member silent result-params)) (progn
(message ...) result) (when (and ... ...) (setq result ...)) (save-
excursion (let ... ... ... ... ... ...)) (message finished))
 (if (= (length result) 0) (if (member value result-params)
(message No result returned by source block) (message Source block
produced no output)) (if (and result-params ...) (progn ... result)
(when ... ...) (save-excursion ...) (message finished)))
 org-babel-insert-result((1 5) (replace) (emacs-lisp (list 1 (+
2 3))\n ((:cache . no) (:colnames . no) (:comments . )
(:exports . code) (:hlines . yes) (:noweb . yes) (:results .
replace) (:session . none) (:shebang . ) (:tangle . ))  nil
nil 0) nil 0 emacs-lisp)
 (if (and (not arg) new-hash (equal new-hash old-hash)) (save-
excursion (goto-char ...) (end-of-line 1) (forward-char 1) (setq
result ...) (message ...) result) (setq result (funcall cmd body
params)) (if (eq result-type ...) (setq result ...))
(org-babel-insert-
result result result-params info new-hash indent lang) (run-hooks
(quote org-babel-after-execute-hook)) result)
 (progn (fset (quote call-process-region) (function* ...)) (unless
(fboundp cmd) (error No org-babel-execute function for %s! lang))
(if (and ... new-hash ...) (save-excursion ... ... ... ... ...  
result)
(setq result ...) (if ... ...) (org-babel-insert-result result  
result-

params info new-hash indent lang) (run-hooks ...) result))
 (unwind-protect (progn (fset ... ...) (unless ... ...)  
(if ... ... ... ... ... ... result)) (if --cl-letf-bound--  
(fset ... --

cl-letf-save--) (fmakunbound ...)))
 (let* ((--cl-letf-bound-- ...) (--cl-letf-save-- ...)) (unwind-
protect (progn ... ... ...) (if --cl-letf-bound-- ... ...)))
 (letf ((... ...)) (unless (fboundp cmd) (error No org-babel-
execute function for %s! lang)) (if (and ... new-hash ...) (save-
excursion ... ... ... ... ... result) (setq result ...) (if ... ...)
(org-babel-insert-result result result-params info new-hash indent
lang) (run-hooks ...) result))
 (letf* ((... ...)) (unless (fboundp cmd) (error No org-babel-
execute function for %s! lang)) (if (and ... new-hash ...) (save-
excursion ... ... ... ... ... result) (setq result ...) (if ... ...)
(org-babel-insert-result result result-params info new-hash indent
lang) (run-hooks ...) result))
 (flet ((call-process-region ... ...)) (unless (fboundp cmd) (error
No org-babel-execute function for %s! lang)) (if (and ... new-
hash ...) (save-excursion ... ... ... ... ... 

[Orgmode] [Update Config] Babel changes -- security updates and final integration push

2010-07-05 Thread Eric Schulte
Hi,

I've just merged a large set of Babel related security measures and
layout/initialization updates into the master branch of the git
repository.

These changes will require existing babel users to update their
configuration, see the following instructions for details -- even if you
think you've read similar instructions before these are worth reading.
http://eschulte.github.com/babel-dev/DONE-document-configuration-changes-for-Babel-integration.html

From here on out Babel development in the master branch will settle down
along with the rest of the current Org-mode feature freeze.

Thanks -- Eric

please reply to this email with any question or problems you encounter,
a text export of the contents of the web page linked above is provided
below.

DONE document configuration changes for Babel integration 
==
Babel took the integration into Org-mode as an opportunity to do
some much needed house cleaning.  Most importantly we have
simplified the enabling of language support, and cleared out
unnecessary configuration variables -- which is great unless you
already have a working configuration under the old model.

The most important changes regard the /location/ and /enabling/
of Babel (both core functionality and language specific support).

Babel: Babel is now part of the core of Org-mode, so it is
 now loaded along with the rest of Org-mode.  That means that
 there is /no configuration/ required to enable the main
 Babel functionality.  For current users, this means that
 statements like

 (require 'org-babel)

 or

 (require 'org-babel-init)

 that may by lying around in your configuration must now be
 removed.

load path: Babel (including all language specific files --
 aside from those which are located in the =contrib/=
 directory for reasons of licencing) now lives in the base of
 the Org-mode lisp directory, so /no additional directories/
 need to be added to your load path to use babel.  For Babel
 users this means that statements adding babel-specific
 directories to your load-path should now be removed from
 your config.

language support: It is no longer necessary to require
 language specific support on a language-by-language basis.
 Specific language support should now be managed through the
 `org-babel-load-languages' variable.  This variable can be
 customized using the Emacs customization interface, or
 through the addition of something like the following to your
 configuration (note: any language not mentioned will /not/
 be enabled, aside from =emacs-lisp= which is enabled by
 default)

 (org-babel-do-load-languages
  'org-babel-load-languages
  '((R . t)
(ditaa . t)
(dot . t)
(emacs-lisp . t)
(gnuplot . t)
(haskell . nil)
(ocaml . nil)
(python . t)
(ruby . t)
(screen . nil)
(sh . t)
(sql . nil)
(sqlite . t)))
 
 Despite this change it is still possible to add
 language support through the use of =require=
 statements, however to conform to Emacs file-name
 regulations all Babel language files have changed
 prefix from =org-babel-*= to =ob-*=, so the require
 lines must also change e.g.

 (require 'org-babel-R)

 should be changed to

 (require 'ob-R)

We have eliminated the =org-babel-tangle-w-comments= variable as
well as the two main internal lists of languages, namely
- =org-babel-interpreters= and
- =org-babel-tangle-langs= 

so any config lines which mention those variables, can/should be
stripped out in their entirety.  This includes any calls to the
=org-babl-add-interpreter= function, whose sole purpose was to
add languages to the =org-babel-interpreters= variable.

With those calls stripped out, we may still in some cases want to
associate a file name extension with certain languages, for
example we want all of our emacs-lisp files to end in a =.el=, we
can do this will the =org-babel-tangle-lang-exts= variable.  In
general you shouldn't need to touch this as it already has
defaults for most common languages, and if a language is not
present in org-babel-tangle-langs, then babel will just use the
language name, so for example a file of =c= code will have a =.c=
extension by default, shell-scripts (identified with =sh=) will
have a =.sh= extension etc...

The configuration of /shebang/ lines now lives in header
arguments.  So the shebang for a single file can be set at the
code block level, e.g.


  #+begin_src clojure :shebang #!/usr/bin/env clj
(println with a shebang line, I can be run as a script!)
  #+end_src

Note that whenever a file is tangled which includes a /shebang/
line, Babel will make the file executable, so there is good
reason to only add /shebangs/ at the source-code block level.
However if you're sure that you want all of your code in some
language (say shell 

Re: [Orgmode] [Update Config] Babel changes -- security updates and final integration push

2010-07-05 Thread Thomas S. Dye

Hi Eric,

Thanks for all your work integrating Babel into Org-mode.

I've pulled the latest Org-mode and changed my initialization  
according to your message.  I also pulled the latest starter-kit, so I  
think I have all the latest code.


When I try to evaluate this code block I get an error that orgtbl-to- 
orgtbl is void.


#+begin_src emacs-lisp
  (list 1 (+ 2 3))
#+end_src

Here is a backtrace:

Debugger entered--Lisp error: (void-function orgtbl-to-orgtbl)
  (orgtbl-to-orgtbl (if (or ... ...) result (list result)) (quote  
(:fmt ...)))

  (concat (orgtbl-to-orgtbl (if ... result ...) (quote ...)) \n)
  (insert (concat (orgtbl-to-orgtbl ... ...) \n))
  (cond ((not ...) (insert ...) (goto-char beg) (when ... ...))  
((member file result-params) (insert result)) ((member html result- 
params) (insert ...)) ((member latex result-params) (insert ...))  
((member code result-params) (insert ...)) ((or ... ...) (save- 
excursion ...) (if ... ...)) (t (org-babel-examplize-region ... ...  
results-switches)))
  (let ((existing-result ...) (results-switches ...) beg end) (when  
existing-result (goto-char existing-result) (save-excursion ... ...)  
(forward-line 1) (setq beg ...) (cond ... ... ...)) (setq results- 
switches (if results-switches ... )) (cond (... ... ... ...)  
(... ...) (... ...) (... ...) (... ...) (... ... ...) (t ...)) (setq  
end (if ... ... ...)) (when (and indent ... ...) (indent-rigidly beg  
end indent)))
  (save-excursion (let (... ... beg end) (when existing- 
result ... ... ... ... ...) (setq results-switches ...)  
(cond ... ... ... ... ... ... ...) (setq end ...) (when ... ...)))
  (if (and result-params (member silent result-params)) (progn  
(message ...) result) (when (and ... ...) (setq result ...)) (save- 
excursion (let ... ... ... ... ... ...)) (message finished))
  (if (= (length result) 0) (if (member value result-params)  
(message No result returned by source block) (message Source block  
produced no output)) (if (and result-params ...) (progn ... result)  
(when ... ...) (save-excursion ...) (message finished)))
  org-babel-insert-result((1 5) (replace) (emacs-lisp (list 1 (+  
2 3))\n ((:cache . no) (:colnames . no) (:comments . )  
(:exports . code) (:hlines . yes) (:noweb . yes) (:results .  
replace) (:session . none) (:shebang . ) (:tangle . ))  nil  
nil 0) nil 0 emacs-lisp)
  (if (and (not arg) new-hash (equal new-hash old-hash)) (save- 
excursion (goto-char ...) (end-of-line 1) (forward-char 1) (setq  
result ...) (message ...) result) (setq result (funcall cmd body  
params)) (if (eq result-type ...) (setq result ...)) (org-babel-insert- 
result result result-params info new-hash indent lang) (run-hooks  
(quote org-babel-after-execute-hook)) result)
  (progn (fset (quote call-process-region) (function* ...)) (unless  
(fboundp cmd) (error No org-babel-execute function for %s! lang))  
(if (and ... new-hash ...) (save-excursion ... ... ... ... ... result)  
(setq result ...) (if ... ...) (org-babel-insert-result result result- 
params info new-hash indent lang) (run-hooks ...) result))
  (unwind-protect (progn (fset ... ...) (unless ... ...)  
(if ... ... ... ... ... ... result)) (if --cl-letf-bound-- (fset ... -- 
cl-letf-save--) (fmakunbound ...)))
  (let* ((--cl-letf-bound-- ...) (--cl-letf-save-- ...)) (unwind- 
protect (progn ... ... ...) (if --cl-letf-bound-- ... ...)))
  (letf ((... ...)) (unless (fboundp cmd) (error No org-babel- 
execute function for %s! lang)) (if (and ... new-hash ...) (save- 
excursion ... ... ... ... ... result) (setq result ...) (if ... ...)  
(org-babel-insert-result result result-params info new-hash indent  
lang) (run-hooks ...) result))
  (letf* ((... ...)) (unless (fboundp cmd) (error No org-babel- 
execute function for %s! lang)) (if (and ... new-hash ...) (save- 
excursion ... ... ... ... ... result) (setq result ...) (if ... ...)  
(org-babel-insert-result result result-params info new-hash indent  
lang) (run-hooks ...) result))
  (flet ((call-process-region ... ...)) (unless (fboundp cmd) (error  
No org-babel-execute function for %s! lang)) (if (and ... new- 
hash ...) (save-excursion ... ... ... ... ... result) (setq  
result ...) (if ... ...) (org-babel-insert-result result result-params  
info new-hash indent lang) (run-hooks ...) result))
  (unwind-protect (flet (...) (unless ... ...)  
(if ... ... ... ... ... ... result)) (setq call-process-region (quote  
org-babel-call-process-region-original)))
  (let* ((info ...) (evaluation-confirmed ...) (lang ...)  
(params ...) (new-hash ...) (old-hash ...) (body ...) (result- 
params ...) (result-type ...) (cmd ...) (dir ...) (default- 
directory ...) (org-babel-call-process-region-original ...)  
(indent ...) result) (unwind-protect (flet ... ... ...) (setq call- 
process-region ...)))
  org-babel-execute-src-block(nil (emacs-lisp (list 1 (+ 2 3)) 
\n ((:cache . no) (:colnames . no) (:comments . ) (:exports .  
code) (:hlines . yes) (:noweb . yes) (:results . 

Re: [Orgmode] [Update Config] Babel changes -- security updates and final integration push

2010-07-05 Thread Eric Schulte
Hi Tom,

Thanks for finding this error, the problem is that org-table is not
being required before the source-code block is run.  As a temporary fix
you can put

  (require 'org-table)

somewhere in your configuration.

As a long term solution I would want to talk to Carsten about how best
to ensure that org-table is required when org-babel has been required as
I believe it may require some change in the org require tree.

Carsten, do you have any suggestion?  I've tried a couple of approaches
but most result in a recursive require error.

Thanks -- Eric

Thomas S. Dye t...@tsdye.com writes:

 Hi Eric,

 Thanks for all your work integrating Babel into Org-mode.

 I've pulled the latest Org-mode and changed my initialization
 according to your message.  I also pulled the latest starter-kit, so I
 think I have all the latest code.

 When I try to evaluate this code block I get an error that orgtbl-to-
 orgtbl is void.

 #+begin_src emacs-lisp
   (list 1 (+ 2 3))
 #+end_src

 Here is a backtrace:

 Debugger entered--Lisp error: (void-function orgtbl-to-orgtbl)
   (orgtbl-to-orgtbl (if (or ... ...) result (list result)) (quote
 (:fmt ...)))
   (concat (orgtbl-to-orgtbl (if ... result ...) (quote ...)) \n)
   (insert (concat (orgtbl-to-orgtbl ... ...) \n))
   (cond ((not ...) (insert ...) (goto-char beg) (when ... ...))
 ((member file result-params) (insert result)) ((member html
 result- 
 params) (insert ...)) ((member latex result-params) (insert ...))
 ((member code result-params) (insert ...)) ((or ... ...) (save- 
 excursion ...) (if ... ...)) (t (org-babel-examplize-region
 ... ... results-switches)))
   (let ((existing-result ...) (results-switches ...) beg end) (when
 existing-result (goto-char existing-result) (save-excursion ... ...)
 (forward-line 1) (setq beg ...) (cond ... ... ...)) (setq results- 
 switches (if results-switches ... )) (cond (... ... ... ...)
 (... ...) (... ...) (... ...) (... ...) (... ... ...) (t ...)) (setq
 end (if ... ... ...)) (when (and indent ... ...) (indent-rigidly beg
 end indent)))
   (save-excursion (let (... ... beg end) (when existing-
 result ... ... ... ... ...) (setq results-switches ...) (cond
 ... ... ... ... ... ... ...) (setq end ...) (when ... ...)))
   (if (and result-params (member silent result-params)) (progn
 (message ...) result) (when (and ... ...) (setq result ...)) (save- 
 excursion (let ... ... ... ... ... ...)) (message finished))
   (if (= (length result) 0) (if (member value result-params)
 (message No result returned by source block) (message Source block
 produced no output)) (if (and result-params ...) (progn ... result)
 (when ... ...) (save-excursion ...) (message finished)))
   org-babel-insert-result((1 5) (replace) (emacs-lisp (list 1 (+
 2 3))\n ((:cache . no) (:colnames . no) (:comments . )
 (:exports . code) (:hlines . yes) (:noweb . yes) (:results .
 replace) (:session . none) (:shebang . ) (:tangle . ))  nil
 nil 0) nil 0 emacs-lisp)
   (if (and (not arg) new-hash (equal new-hash old-hash)) (save-
 excursion (goto-char ...) (end-of-line 1) (forward-char 1) (setq
 result ...) (message ...) result) (setq result (funcall cmd body
 params)) (if (eq result-type ...) (setq result ...))
 (org-babel-insert- 
 result result result-params info new-hash indent lang) (run-hooks
 (quote org-babel-after-execute-hook)) result)
   (progn (fset (quote call-process-region) (function* ...)) (unless
 (fboundp cmd) (error No org-babel-execute function for %s! lang))
 (if (and ... new-hash ...) (save-excursion ... ... ... ... ... result)
 (setq result ...) (if ... ...) (org-babel-insert-result result result- 
 params info new-hash indent lang) (run-hooks ...) result))
   (unwind-protect (progn (fset ... ...) (unless ... ...) (if ... ... ... ... 
 ... ... result)) (if --cl-letf-bound-- (fset ... -- 
 cl-letf-save--) (fmakunbound ...)))
   (let* ((--cl-letf-bound-- ...) (--cl-letf-save-- ...)) (unwind-
 protect (progn ... ... ...) (if --cl-letf-bound-- ... ...)))
   (letf ((... ...)) (unless (fboundp cmd) (error No org-babel-
 execute function for %s! lang)) (if (and ... new-hash ...) (save-
 excursion ... ... ... ... ... result) (setq result ...) (if ... ...)
 (org-babel-insert-result result result-params info new-hash indent
 lang) (run-hooks ...) result))
   (letf* ((... ...)) (unless (fboundp cmd) (error No org-babel-
 execute function for %s! lang)) (if (and ... new-hash ...) (save-
 excursion ... ... ... ... ... result) (setq result ...) (if ... ...)
 (org-babel-insert-result result result-params info new-hash indent
 lang) (run-hooks ...) result))
   (flet ((call-process-region ... ...)) (unless (fboundp cmd) (error
 No org-babel-execute function for %s! lang)) (if (and ... new- 
 hash ...) (save-excursion ... ... ... ... ... result) (setq result
 ...) (if ... ...) (org-babel-insert-result result result-params  info
 new-hash indent lang) (run-hooks ...) result))
   (unwind-protect (flet (...) (unless ... ...) (if
 ... ... ... ... ... ... 

Re: [Orgmode] [Update Config] Babel changes -- security updates and final integration push

2010-07-05 Thread Thomas S. Dye

Thanks Eric,

That works.

Tom
On Jul 5, 2010, at 3:09 PM, Eric Schulte wrote:


Hi Tom,

Thanks for finding this error, the problem is that org-table is not
being required before the source-code block is run.  As a temporary  
fix

you can put

 (require 'org-table)

somewhere in your configuration.

As a long term solution I would want to talk to Carsten about how best
to ensure that org-table is required when org-babel has been  
required as

I believe it may require some change in the org require tree.

Carsten, do you have any suggestion?  I've tried a couple of  
approaches

but most result in a recursive require error.

Thanks -- Eric

Thomas S. Dye t...@tsdye.com writes:


Hi Eric,

Thanks for all your work integrating Babel into Org-mode.

I've pulled the latest Org-mode and changed my initialization
according to your message.  I also pulled the latest starter-kit,  
so I

think I have all the latest code.

When I try to evaluate this code block I get an error that orgtbl-to-
orgtbl is void.

#+begin_src emacs-lisp
 (list 1 (+ 2 3))
#+end_src

Here is a backtrace:

Debugger entered--Lisp error: (void-function orgtbl-to-orgtbl)
 (orgtbl-to-orgtbl (if (or ... ...) result (list result)) (quote
(:fmt ...)))
 (concat (orgtbl-to-orgtbl (if ... result ...) (quote ...)) \n)
 (insert (concat (orgtbl-to-orgtbl ... ...) \n))
 (cond ((not ...) (insert ...) (goto-char beg) (when ... ...))
((member file result-params) (insert result)) ((member html
result-
params) (insert ...)) ((member latex result-params) (insert ...))
((member code result-params) (insert ...)) ((or ... ...) (save-
excursion ...) (if ... ...)) (t (org-babel-examplize-region
... ... results-switches)))
 (let ((existing-result ...) (results-switches ...) beg end) (when
existing-result (goto-char existing-result) (save-excursion ... ...)
(forward-line 1) (setq beg ...) (cond ... ... ...)) (setq results-
switches (if results-switches ... )) (cond (... ... ... ...)
(... ...) (... ...) (... ...) (... ...) (... ... ...) (t ...)) (setq
end (if ... ... ...)) (when (and indent ... ...) (indent-rigidly beg
end indent)))
 (save-excursion (let (... ... beg end) (when existing-
result ... ... ... ... ...) (setq results-switches ...) (cond
... ... ... ... ... ... ...) (setq end ...) (when ... ...)))
 (if (and result-params (member silent result-params)) (progn
(message ...) result) (when (and ... ...) (setq result ...)) (save-
excursion (let ... ... ... ... ... ...)) (message finished))
 (if (= (length result) 0) (if (member value result-params)
(message No result returned by source block) (message Source block
produced no output)) (if (and result-params ...) (progn ... result)
(when ... ...) (save-excursion ...) (message finished)))
 org-babel-insert-result((1 5) (replace) (emacs-lisp (list 1 (+
2 3))\n ((:cache . no) (:colnames . no) (:comments . )
(:exports . code) (:hlines . yes) (:noweb . yes) (:results .
replace) (:session . none) (:shebang . ) (:tangle . ))  nil
nil 0) nil 0 emacs-lisp)
 (if (and (not arg) new-hash (equal new-hash old-hash)) (save-
excursion (goto-char ...) (end-of-line 1) (forward-char 1) (setq
result ...) (message ...) result) (setq result (funcall cmd body
params)) (if (eq result-type ...) (setq result ...))
(org-babel-insert-
result result result-params info new-hash indent lang) (run-hooks
(quote org-babel-after-execute-hook)) result)
 (progn (fset (quote call-process-region) (function* ...)) (unless
(fboundp cmd) (error No org-babel-execute function for %s! lang))
(if (and ... new-hash ...) (save-excursion ... ... ... ... ...  
result)
(setq result ...) (if ... ...) (org-babel-insert-result result  
result-

params info new-hash indent lang) (run-hooks ...) result))
 (unwind-protect (progn (fset ... ...) (unless ... ...)  
(if ... ... ... ... ... ... result)) (if --cl-letf-bound--  
(fset ... --

cl-letf-save--) (fmakunbound ...)))
 (let* ((--cl-letf-bound-- ...) (--cl-letf-save-- ...)) (unwind-
protect (progn ... ... ...) (if --cl-letf-bound-- ... ...)))
 (letf ((... ...)) (unless (fboundp cmd) (error No org-babel-
execute function for %s! lang)) (if (and ... new-hash ...) (save-
excursion ... ... ... ... ... result) (setq result ...) (if ... ...)
(org-babel-insert-result result result-params info new-hash indent
lang) (run-hooks ...) result))
 (letf* ((... ...)) (unless (fboundp cmd) (error No org-babel-
execute function for %s! lang)) (if (and ... new-hash ...) (save-
excursion ... ... ... ... ... result) (setq result ...) (if ... ...)
(org-babel-insert-result result result-params info new-hash indent
lang) (run-hooks ...) result))
 (flet ((call-process-region ... ...)) (unless (fboundp cmd) (error
No org-babel-execute function for %s! lang)) (if (and ... new-
hash ...) (save-excursion ... ... ... ... ... result) (setq result
...) (if ... ...) (org-babel-insert-result result result-params  info
new-hash indent lang) (run-hooks ...) result))
 (unwind-protect (flet (...) (unless ... ...) (if
... ... ... ... ... ... result))