Need help with ob-async?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

astahlman
244 Stars 16 Forks 68 Commits 16 Opened issues

Description

Asynchronous src_block execution for org-babel

Services available

!
?

Need anything else?

Contributors list

# 32,375
Python
apache
apache-...
Scala
42 commits
# 88,882
C
Haxe
ivy
chroot
2 commits
# 646,188
Emacs
org-mod...
2 commits
# 127,761
Emacs
Clojure
vim-plu...
Vim
1 commit
# 590,854
Emacs
org-mod...
1 commit
# 279,638
Python
Emacs
org-mod...
doom-em...
1 commit

Build Status MELPA Stable MELPA

ob-async
enables asynchronous execution of org-babel src blocks, like this:

Demo of async sh execution

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 https://github.com/astahlman/ob-async/pull/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 https://github.com/astahlman/ob-async/issues/37 and https://github.com/jwiegley/emacs-async/pull/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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.