From af948ca390c757f5f821eda9614cf106f07ef09c Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Wed, 18 Dec 2019 10:18:58 -0500 Subject: [PATCH] lang/org: refactor babel loaders & fix jupyter loader #2198 --- modules/lang/org/config.el | 13 +++++++++---- modules/lang/org/contrib/jupyter.el | 11 ++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/modules/lang/org/config.el b/modules/lang/org/config.el index 6710f5b96..2a9e02d0c 100644 --- a/modules/lang/org/config.el +++ b/modules/lang/org/config.el @@ -214,12 +214,17 @@ background (and foreground) match the current theme." (defun +org-init-babel-lazy-loader-h () "Load babel libraries lazily when babel blocks are executed." + (defun +org--babel-lazy-load (lang) + (cl-check-type lang symbol) + (or (run-hook-with-args-until-success '+org-babel-load-functions lang) + (require (intern-soft (format "ob-%s" lang)) nil t) + (require lang nil t))) + (defadvice! +org--src-lazy-load-library-a (lang) "Lazy load a babel package to ensure syntax highlighting." :before #'org-src--get-lang-mode (or (cdr (assoc lang org-src-lang-modes)) - (fboundp (intern-soft (format "%s-mode" lang))) - (require (intern-soft (format "ob-%s" lang)) nil t))) + (+org--babel-lazy-load lang))) (defadvice! +org--babel-lazy-load-library-a (info) "Load babel libraries lazily when babel blocks are executed." @@ -231,8 +236,7 @@ background (and foreground) match the current theme." lang))) (when (and lang (not (cdr (assq lang org-babel-load-languages))) - (or (run-hook-with-args-until-success '+org-babel-load-functions lang) - (require (intern (format "ob-%s" lang)) nil t))) + (+org--babel-lazy-load lang)) (when (assq :async (nth 2 info)) ;; ob-async has its own agenda for lazy loading packages (in the ;; child process), so we only need to make sure it's loaded. @@ -988,6 +992,7 @@ compelling reason, so..." (if (featurep! +dragndrop) (load! "contrib/dragndrop")) (if (featurep! +ipython) (load! "contrib/ipython")) (if (featurep! +journal) (load! "contrib/journal")) + (if (featurep! +jupyter) (load! "contrib/jupyter")) (if (featurep! +pomodoro) (load! "contrib/pomodoro")) (if (featurep! +present) (load! "contrib/present")) diff --git a/modules/lang/org/contrib/jupyter.el b/modules/lang/org/contrib/jupyter.el index 6fce999de..a64df8e0e 100644 --- a/modules/lang/org/contrib/jupyter.el +++ b/modules/lang/org/contrib/jupyter.el @@ -1,7 +1,7 @@ ;;; lang/org/contrib/jupyter.el -*- lexical-binding: t; -*- ;;;###if (featurep! +jupyter) -(use-package! jupyter +(use-package! ob-jupyter :defer t :init (after! ob-async @@ -9,5 +9,10 @@ (add-hook! '+org-babel-load-functions (defun +org-babel-load-jupyter-h (lang) - (and (string-prefix-p "jupyter-" (symbol-name lang)) - (require lang nil t))))) + (when (string-prefix-p "jupyter-" (symbol-name lang)) + (let ((lang (string-remove-prefix "jupyter-" (symbol-name lang)))) + (unless (assoc lang org-src-lang-modes) + (require (intern (format "ob-%s" lang)) + nil t))) + (with-demoted-errors "Jupyter: %s" + (require 'ob-jupyter nil t))))))