Tidy load-time specific source block evaluation

This commit is contained in:
Gerard Vermeulen 2022-04-17 19:05:06 +02:00
parent ec0210d63f
commit eeae503add
2 changed files with 52 additions and 25 deletions

View File

@ -1816,25 +1816,51 @@ variables in order to export the =info-org-link= types in this document to
#+caption: Evaluate specific source blocks at load-time. #+caption: Evaluate specific source blocks at load-time.
#+name: lst:load-time-specific-source-block-evaluation #+name: lst:load-time-specific-source-block-evaluation
#+begin_src emacs-lisp #+begin_src emacs-lisp
(defun my-org-eval-blocks-named (infix) (with-eval-after-load 'emacs
"Evaluate all source blocks having INFIX in their name." (defun org-eval-infixed-blocks (infix)
(when (eq major-mode 'org-mode) "Evaluate all source blocks having INFIX in their name."
(let ((blocks (when (eq major-mode 'org-mode)
(org-element-map (let ((blocks
(org-element-parse-buffer 'greater-element nil) 'src-block (org-element-map
(lambda (block) (org-element-parse-buffer 'greater-element nil) 'src-block
(let ((name (org-element-property :name block))) (lambda (block)
(when (and name (string-match-p infix name)) (when-let ((name (org-element-property :name block)))
block)))))) (when (string-match-p infix name) block))))))
(dolist (block blocks) (dolist (block blocks)
(goto-char (org-element-property :begin block)) (goto-char (org-element-property :begin block))
(org-babel-execute-src-block))))) (org-babel-execute-src-block)))))
;; Emacs looks for "Local variables:" after the last "?\n?\f". (defun org-eval-emacs-lisp-setup-blocks ()
(add-to-list 'safe-local-eval-forms "Evaluate all source blocks having \"emacs-lisp-setup\" in their name."
'(apply 'my-org-eval-blocks-named '("emacs-lisp-setup"))) (org-eval-infixed-blocks "emacs-lisp-setup"))
(add-to-list 'safe-local-eval-forms
'(apply 'my-org-eval-blocks-named '("python-setup"))) (defun org-eval-python-setup-blocks ()
"Evaluate all source blocks having \"python-setup\" in their name."
(org-eval-infixed-blocks "python-setup"))
;; Emacs looks for "Local variables:" after the last "?\n?\f".
(add-to-list 'safe-local-eval-forms '(org-eval-emacs-lisp-setup-blocks))
(add-to-list 'safe-local-eval-forms '(org-eval-python-setup-blocks)))
(with-eval-after-load 'emacs
(defun my-org-eval-blocks-named (infix)
"Evaluate all source blocks having INFIX in their name."
(when (eq major-mode 'org-mode)
(let ((blocks
(org-element-map
(org-element-parse-buffer 'greater-element nil) 'src-block
(lambda (block)
(when-let ((name (org-element-property :name block)))
(when (string-match-p infix name) block))))))
(dolist (block blocks)
(goto-char (org-element-property :begin block))
(org-babel-execute-src-block)))))
;; Emacs looks for "Local variables:" after the last "?\n?\f".
(add-to-list 'safe-local-eval-forms
'(apply 'my-org-eval-blocks-named '("emacs-lisp-setup")))
(add-to-list 'safe-local-eval-forms
'(apply 'my-org-eval-blocks-named '("python-setup"))))
#+end_src #+end_src
*** [[info:org#LaTeX header and sectioning][Easy LaTeX preamble editing]] *** [[info:org#LaTeX header and sectioning][Easy LaTeX preamble editing]]
@ -3596,6 +3622,6 @@ Only the [[info:org#Top][Org]] source file shows the local variables footer.
# Local Variables: # Local Variables:
# compile-command: "latexmk -interaction=nonstopmode -lualatex -pvc -shell-escape README.tex" # compile-command: "latexmk -interaction=nonstopmode -lualatex -pvc -shell-escape README.tex"
# eval: (apply 'my-org-eval-blocks-named '("emacs-lisp-setup")) # eval: (org-eval-emacs-lisp-setup-blocks)
# fill-column: 80 # fill-column: 80
# End: # End:

View File

@ -5,21 +5,22 @@ emacs -Q --batch --eval "
(require 'org) (require 'org)
(require 'ob-latex) (require 'ob-latex)
(require 'ox-latex) (require 'ox-latex)
(defun my-org-eval-blocks-named (infix) (defun org-eval-infixed-blocks (infix)
(when (eq major-mode 'org-mode) (when (eq major-mode 'org-mode)
(let ((blocks (let ((blocks
(org-element-map (org-element-map
(org-element-parse-buffer 'greater-element nil) 'src-block (org-element-parse-buffer 'greater-element nil) 'src-block
(lambda (block) (lambda (block)
(let ((name (org-element-property :name block))) (when-let ((name (org-element-property :name block)))
(when (and name (string-match-p infix name)) (when (string-match-p infix name) block))))))
block))))))
(dolist (block blocks) (dolist (block blocks)
(goto-char (org-element-property :begin block)) (goto-char (org-element-property :begin block))
(org-babel-execute-src-block))))) (org-babel-execute-src-block)))))
(add-to-list 'safe-local-eval-forms (defun org-eval-emacs-lisp-setup-blocks ()
'(apply 'my-org-eval-blocks-named '(\"emacs-lisp-setup\"))) (org-eval-infixed-blocks \"emacs-lisp-setup\"))
(add-to-list 'safe-local-eval-forms '(org-eval-emacs-lisp-setup-blocks))
(setq org-confirm-babel-evaluate nil) (setq org-confirm-babel-evaluate nil)
(setq python-indent-guess-indent-offset nil) (setq python-indent-guess-indent-offset nil)