Procházet zdrojové kódy

refactor `org-babel-check-confirm-evaluate' macro

- meaningful variable names
- don't overly pollute the name space of the macro body

* lisp/ob-core.el (org-babel-check-confirm-evaluate): Refactoring.
Eric Schulte před 12 roky
rodič
revize
d7758f565c
1 změnil soubory, kde provedl 29 přidání a 22 odebrání
  1. 29 22
      lisp/ob-core.el

+ 29 - 22
lisp/ob-core.el

@@ -286,29 +286,36 @@ Returns a list
 
 (defvar org-current-export-file) ; dynamically bound
 (defmacro org-babel-check-confirm-evaluate (info &rest body)
-  "Pull some information from code block INFO and evaluate BODY."
+  "Evaluate BODY with special execution confirmation variables set.
+
+Specifically; NOEVAL will indicate if evaluation is allowed,
+QUERY will indicate if a user query is required, CODE-BLOCK will
+hold the language of the code block, and BLOCK-NAME will hold the
+name of the code block."
   (declare (indent defun))
-  `(let* ((info0th        (nth 0 ,info))
-	  (info1st        (nth 1 ,info))
-	  (info2nd        (nth 2 ,info))
-	  (info4th        (nth 4 ,info))
-	  (eval           (or (cdr  (assoc :eval   info2nd))
-			      (when (assoc :noeval info2nd) "no")))
-	  (eval-no        (or (equal eval "no")
-			      (equal eval "never")))
-	  (export         (org-bound-and-true-p org-current-export-file))
-	  (eval-no-export (and export (or (equal eval "no-export")
-					  (equal eval "never-export"))))
-	  (noeval         (or eval-no eval-no-export))
-	  (query          (or (equal eval "query")
-			      (and export (equal eval "query-export"))
-			      (when (functionp org-confirm-babel-evaluate)
-				(funcall org-confirm-babel-evaluate
-					 info0th info1st))
-			      org-confirm-babel-evaluate))
-	  (code-block     (if info    (format  " %s "  info0th) " "))
-	  (block-name     (if info4th (format " (%s) " info4th) " ")))
-     ,@body))
+  (org-with-gensyms
+      (lang block-body headers name eval eval-no export eval-no-export)
+    `(let* ((,lang           (nth 0 ,info))
+	    (,block-body     (nth 1 ,info))
+	    (,headers        (nth 2 ,info))
+	    (,name           (nth 4 ,info))
+	    (,eval           (or (cdr  (assoc :eval   ,headers))
+				 (when (assoc :noeval ,headers) "no")))
+	    (,eval-no        (or (equal ,eval "no")
+				 (equal ,eval "never")))
+	    (,export         (org-bound-and-true-p org-current-export-file))
+	    (,eval-no-export (and ,export (or (equal ,eval "no-export")
+					      (equal ,eval "never-export"))))
+	    (noeval          (or ,eval-no ,eval-no-export))
+	    (query           (or (equal ,eval "query")
+				 (and ,export (equal ,eval "query-export"))
+				 (when (functionp org-confirm-babel-evaluate)
+				   (funcall org-confirm-babel-evaluate
+					    ,lang ,block-body))
+				 org-confirm-babel-evaluate))
+	    (code-block      (if ,info (format  " %s "  ,lang) " "))
+	    (block-name      (if ,name (format " (%s) " ,name) " ")))
+       ,@body)))
 
 (defsubst org-babel-check-evaluate (info)
   "Check if code block INFO should be evaluated.