浏览代码

moved org-babel-merge-results into anonymous function in flet

Eric Schulte 16 年之前
父节点
当前提交
44ff72261c
共有 1 个文件被更改,包括 34 次插入38 次删除
  1. 34 38
      lisp/org-babel.el

+ 34 - 38
lisp/org-babel.el

@@ -477,48 +477,44 @@ elements of PLISTS override the values of previous element.  This
 takes into account some special considerations for certain
 parameters when merging lists."
   (let (params results vars var ref)
-    (mapc (lambda (plist)
-	    (mapc (lambda (pair)
-		    (case (car pair)
-		      (:var
-		       ;; we want only one specification per variable
-		       (when (string-match "^\\([^= \f\t\n\r\v]+\\)[ \t]*=[ \t]*\\([^\f\n\r\v]+\\)$" (cdr pair))
-			 ;; TODO: When is this not true?
-			 (setq var (intern (match-string 1 (cdr pair)))
-			       ref (match-string 2 (cdr pair))
-			       vars (cons (cons var ref) (assq-delete-all var vars)))))
-		      (:results
-		       ;; maintain list of unique :results specifications
-		       (setq results (org-babel-merge-results results (split-string (cdr pair)))))
-		      (t
-		       ;; replace: this covers e.g. :session
-		       (setq params (cons pair (assq-delete-all	(car pair) params))))))
-		  plist))
-	  plists)
+    (flet ((e-merge (exclusive-groups &rest result-params)
+                    (let (output)
+                      (mapc (lambda (new-params)
+                              (mapc (lambda (new-param)
+                                      (mapc (lambda (exclusive-group)
+                                              (when (member new-param exclusive-group)
+                                                (mapcar (lambda (excluded-param)
+                                                          (setq output (delete excluded-param output)))
+                                                        exclusive-group)))
+                                            exclusive-groups)
+                                      (setq output (org-uniquify (cons new-param output))))
+                                    new-params))
+                            result-params)
+                      output)))
+      (mapc (lambda (plist)
+              (mapc (lambda (pair)
+                      (case (car pair)
+                        (:var
+                         ;; we want only one specification per variable
+                         (when (string-match "^\\([^= \f\t\n\r\v]+\\)[ \t]*=[ \t]*\\([^\f\n\r\v]+\\)$" (cdr pair))
+                           ;; TODO: When is this not true?
+                           (setq var (intern (match-string 1 (cdr pair)))
+                                 ref (match-string 2 (cdr pair))
+                                 vars (cons (cons var ref) (assq-delete-all var vars)))))
+                        (:results
+                         ;; maintain list of unique :results specifications
+                         (setq results (e-merge '(("file" "vector" "scalar")
+                                                  ("replace" "silent"))
+                                                results (split-string (cdr pair)))))
+                        (t
+                         ;; replace: this covers e.g. :session
+                         (setq params (cons pair (assq-delete-all	(car pair) params))))))
+                    plist))
+            plists))
     (setq vars (mapcar (lambda (pair) (format "%s=%s" (car pair) (cdr pair))) vars))
     (while vars (setq params (cons (cons :var (pop vars)) params)))
     (cons (cons :results (mapconcat 'identity results " ")) params)))
 
-(defun org-babel-merge-results (&rest result-params)
-  "Combine all result parameter lists in RESULT-PARAMS taking
-into account the fact that some groups of result params are
-mutually exclusive."
-  (let ((exclusive-groups '(("file" "vector" "scalar")
-                            ("replace" "silent")))
-        output)
-    (mapc (lambda (new-params)
-            (mapc (lambda (new-param)
-                    (mapc (lambda (exclusive-group)
-                            (when (member new-param exclusive-group)
-                              (mapcar (lambda (excluded-param)
-                                        (setq output (delete excluded-param output)))
-                                      exclusive-group)))
-                          exclusive-groups)
-                    (setq output (org-uniquify (cons new-param output))))
-                  new-params))
-          result-params)
-    output))
-
 (defun org-babel-clean-text-properties (text)
   "Strip all properties from text return."
   (set-text-properties 0 (length text) nil text) text)