Refactor lang/org +babel lazy loader for src blocks

Exposes +org-babel-load-functions, which are a list of functions that
will be tried in order to load the dependencies of a src block.
This commit is contained in:
Henrik Lissner 2018-05-30 18:11:12 +02:00
parent bb9f00e275
commit 98b439e3bb
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -12,6 +12,11 @@
"An alist that maps languages to babel libraries. This is necessary for babel
libraries (ob-*.el) that don't match the name of the language.")
(defvar +org-babel-load-functions ()
"A list of functions that are used to try to load the current executing src
block. They take one argument (the language specified in the src block, as
string). Stops at the first function to return non-nil.")
(defun +org|init-babel ()
(setq org-src-fontify-natively t ; make code pretty
org-src-preserve-indentation t ; use native major-mode indentation
@ -24,11 +29,12 @@ libraries (ob-*.el) that don't match the name of the language.")
(let* ((language (org-element-property :language (org-element-at-point)))
(lang-sym (intern language)))
(when (and (not (cdr (assq lang-sym org-babel-load-languages)))
(require
(intern (format "ob-%s"
(or (cdr (assoc (downcase language) +org-babel-mode-alist))
language)))
nil t))
(or (run-hook-with-args-until-success '+org-babel-load-functions language)
(require
(intern (format "ob-%s"
(or (cdr (assoc (downcase language) +org-babel-mode-alist))
language)))
nil t)))
(map-put org-babel-load-languages lang-sym t))
(apply orig-fn args)))
(advice-add #'org-babel-execute-src-block :around #'+org*babel-execute-src-block)