summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Ecay <aaronecay@gmail.com>2013-04-18 04:06:55 -0400
committerBastien Guerry <bzg@altern.org>2013-04-18 12:26:23 +0200
commitbf29482973408b4a9c94e13e4c320e4c55b29490 (patch)
treef0f82e504986f0b192370f2b27642b9ede487529
parent79ecb6570b7dabe2321f4bc36450473e89f8d732 (diff)
downloadorg-mode-bf29482973408b4a9c94e13e4c320e4c55b29490.tar.gz
Clean up various org-babel-*-maybe commands
* lisp/ob-core.el (org-babel-when-in-src-block): New macro. (org-babel-execute-src-block-maybe) (org-babel-expand-src-block-maybe) (org-babel-load-in-session-maybe, org-babel-pop-to-session-maybe): Use it. org-babel-get-src-block-info is a potentially expensive operation, which is why its ‘light’ argument exists. But in any case, it is overkill to query the whole info, if all that is needed is whether point is in a block or not. Factor the simplified common code out into a macro.
-rw-r--r--lisp/ob-core.el34
1 files changed, 20 insertions, 14 deletions
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index b8d93f2..e44fc02 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -351,15 +351,25 @@ of potentially harmful code."
(or (org-babel-execute-src-block-maybe)
(org-babel-lob-execute-maybe)))
+(defmacro org-babel-when-in-src-block (&rest body)
+ "Execute BODY if point is in a source block and return t.
+
+Otherwise do nothing and return nil."
+ `(if (or (org-babel-where-is-src-block-head)
+ (org-babel-get-inline-src-block-matches))
+ (progn
+ ,@body
+ t)
+ nil))
+
(defun org-babel-execute-src-block-maybe ()
"Conditionally execute a source block.
Detect if this is context for a Babel src-block and if so
then run `org-babel-execute-src-block'."
(interactive)
- (let ((info (org-babel-get-src-block-info)))
- (if info
- (progn (org-babel-eval-wipe-error-buffer)
- (org-babel-execute-src-block current-prefix-arg info) t) nil)))
+ (org-babel-when-in-src-block
+ (org-babel-eval-wipe-error-buffer)
+ (org-babel-execute-src-block current-prefix-arg)))
;;;###autoload
(defun org-babel-view-src-block-info ()
@@ -395,10 +405,8 @@ a window into the `org-babel-get-src-block-info' function."
Detect if this is context for a org-babel src-block and if so
then run `org-babel-expand-src-block'."
(interactive)
- (let ((info (org-babel-get-src-block-info)))
- (if info
- (progn (org-babel-expand-src-block current-prefix-arg info) t)
- nil)))
+ (org-babel-when-in-src-block
+ (org-babel-expand-src-block current-prefix-arg)))
;;;###autoload
(defun org-babel-load-in-session-maybe ()
@@ -406,10 +414,8 @@ then run `org-babel-expand-src-block'."
Detect if this is context for a org-babel src-block and if so
then run `org-babel-load-in-session'."
(interactive)
- (let ((info (org-babel-get-src-block-info)))
- (if info
- (progn (org-babel-load-in-session current-prefix-arg info) t)
- nil)))
+ (org-babel-when-in-src-block
+ (org-babel-load-in-session current-prefix-arg)))
(add-hook 'org-metaup-hook 'org-babel-load-in-session-maybe)
@@ -419,8 +425,8 @@ then run `org-babel-load-in-session'."
Detect if this is context for a org-babel src-block and if so
then run `org-babel-pop-to-session'."
(interactive)
- (let ((info (org-babel-get-src-block-info)))
- (if info (progn (org-babel-pop-to-session current-prefix-arg info) t) nil)))
+ (org-babel-when-in-src-block
+ (org-babel-switch-to-session current-prefix-arg)))
(add-hook 'org-metadown-hook 'org-babel-pop-to-session-maybe)