ob-async
enables asynchronous execution of org-babel src blocks,
like this:
ob-async
isn't tied to src blocks in a specific org-babel
language. Simply add the keyword :async
to the header-args of any
org-babel src block and invoke ob-async-org-babel-execute-src-block
.
Installation
ob-async
is available in MELPA. If you'd rather install from source,
make sure ob-async.el
is on your load-path
, like this.
(add-to-list 'load-path "$PATH_TO_OB_ASYNC_ROOT_DIR")
Require the package and ob-async
will handle any source block which
includes :async
in its header-args.
(require 'ob-async)
Configuration
ob-async
should work with no additional setup for most
languages. However, there are a few known edge-cases which require
extra configuration.
ob-async-no-async-languages-alist
Some org-babel languages (e.g., ob-python
) define their own :async
keyword that conflicts with ob-async
. ob-async
will ignore any
languages in this blacklist, even if the :async
keywords is
present. Note that the -alist
suffix is misleading; this variable
actually represents a plain list and will be renamed in a future
release.
Example:
(setq ob-async-no-async-languages-alist '("ipython"))
For additional context, see #35.
ob-async-pre-execute-src-block-hook
Some org-babel languages require additional user configuration. For
example, ob-julia
requires inferior-julia-program-name
to be
defined. Normally you would define such variables in your init.el
,
but src block execution occurs in an Emacs subprocess which does not
evaluate init.el
on startup. Instead, you can place initialization
logic in ob-async-pre-execute-src-block-hook
, which runs before
execution of every src block.
Example:
(add-hook 'ob-async-pre-execute-src-block-hook
'(lambda ()
(setq inferior-julia-program-name "/usr/local/bin/julia")))
For additional context, see #37 and jwiegley/emacs-async#73.
Development
Cask manages dependencies and runs
tests. Once Cask is installed, you can make test
.
Troubleshooting
First, go through the troubleshooting checklist,
troubleshooting.org
. It's an org-mode file in this repository that's
designed to diagnose issues with ob-async. If that doesn't solve your
problem, include a copy of the entire file (which will include your
#+RESULTS
blocks) in a Github issue.