From 67a26e0141c147c22d76482e96770a81432d2f7b Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Wed, 9 Nov 2011 14:35:04 -0700 Subject: [PATCH] execute call lines when executing an entire buffer * lisp/ob-lob.el (org-babel-map-call-lines): Allow mapping of code over all call lines in a buffer. * lisp/ob.el (org-babel-execute-buffer): Execute call lines when executing an entire buffer. --- lisp/ob-lob.el | 24 ++++++++++++++++++++++++ lisp/ob.el | 5 ++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lisp/ob-lob.el b/lisp/ob-lob.el index 9a87b7078..d5ee23957 100644 --- a/lisp/ob-lob.el +++ b/lisp/ob-lob.el @@ -88,6 +88,30 @@ If you change the value of this variable then your files may "Regexp to match calls to predefined source block functions.") ;; functions for executing lob one-liners + +;;;###autoload +(defmacro org-babel-map-call-lines (file &rest body) + "Evaluate BODY forms on each call line in FILE. +If FILE is nil evaluate BODY forms on source blocks in current +buffer." + (declare (indent 1)) + (let ((tempvar (make-symbol "file"))) + `(let* ((,tempvar ,file) + (visited-p (or (null ,tempvar) + (get-file-buffer (expand-file-name ,tempvar)))) + (point (point)) to-be-removed) + (save-window-excursion + (when ,tempvar (find-file ,tempvar)) + (setq to-be-removed (current-buffer)) + (goto-char (point-min)) + (while (re-search-forward org-babel-lob-one-liner-regexp nil t) + (goto-char (match-beginning 1)) + (save-match-data ,@body) + (goto-char (match-end 0)))) + (unless visited-p (kill-buffer to-be-removed)) + (goto-char point)))) +(def-edebug-spec org-babel-map-call-lines (form body)) + ;;;###autoload (defun org-babel-lob-execute-maybe () "Execute a Library of Babel source block, if appropriate. diff --git a/lisp/ob.el b/lisp/ob.el index 37fab74e6..8bcc21d4a 100644 --- a/lisp/ob.el +++ b/lisp/ob.el @@ -71,6 +71,7 @@ (declare-function org-babel-ref-goto-headline-id "ob-ref" (id)) (declare-function org-babel-ref-headline-body "ob-ref" ()) (declare-function org-babel-lob-execute-maybe "ob-lob" ()) +(declare-function org-babel-map-call-lines "ob-lob" (file &rest body)) (declare-function org-number-sequence "org-compat" (from &optional to inc)) (declare-function org-at-item-p "org-list" ()) (declare-function org-list-parse-list "org-list" (&optional delete)) @@ -858,7 +859,9 @@ the current buffer." (org-babel-map-src-blocks nil (org-babel-execute-src-block arg)) (org-babel-map-inline-src-blocks nil - (org-babel-execute-src-block arg)))) + (org-babel-execute-src-block arg)) + (org-babel-map-call-lines nil + (org-babel-lob-execute-maybe)))) ;;;###autoload (defun org-babel-execute-subtree (&optional arg) -- 2.11.4.GIT