Browse Source

ob-core: allow language specific header arguments in properties

* lisp/ob-core.el (org-babel-insert-header-arg,
  org-babel-parse-src-block-match): Replace `if' with empty else part
  by `when' for readability.  (org-babel-params-from-properties):
  Inquire for language specific and default header properties.
  Language specific header properties take precedence over default
  header properties and old-style header property specifications.

This allows for header arguments to be specified as
properties (including inheritance).

#+PROPERTY: header-args :cache "no"
#+PROPERTY: header-args:R :session "*R-property*"

:PROPERTIES:
:header-args:   :cache "yes"
:header-args:R: :session "*R-drawer*"
:END:
Achim Gratz 12 years ago
parent
commit
693dda67e6
1 changed files with 31 additions and 19 deletions
  1. 31 19
      lisp/ob-core.el

+ 31 - 19
lisp/ob-core.el

@@ -766,7 +766,7 @@ arguments and pop open the results in a preview buffer."
 	 (lang-headers (intern (concat "org-babel-header-args:" lang)))
 	 (lang-headers (intern (concat "org-babel-header-args:" lang)))
 	 (headers (org-babel-combine-header-arg-lists
 	 (headers (org-babel-combine-header-arg-lists
 		   org-babel-common-header-args-w-values
 		   org-babel-common-header-args-w-values
-		   (if (boundp lang-headers) (eval lang-headers) nil)))
+		   (when (boundp lang-headers) (eval lang-headers))))
 	 (arg (org-icompleting-read
 	 (arg (org-icompleting-read
 	       "Header Arg: "
 	       "Header Arg: "
 	       (mapcar
 	       (mapcar
@@ -1294,23 +1294,35 @@ portions of results lines."
 Return an association list of any source block params which
 Return an association list of any source block params which
 may be specified in the properties of the current outline entry."
 may be specified in the properties of the current outline entry."
   (save-match-data
   (save-match-data
-    (let (val sym)
-      (org-babel-parse-multiple-vars
-       (delq nil
-	     (mapcar
-	      (lambda (header-arg)
-		(and (setq val (org-entry-get (point) header-arg t))
-		     (cons (intern (concat ":" header-arg))
-			   (org-babel-read val))))
-	      (mapcar
-	       #'symbol-name
-	       (mapcar
-		#'car
-		(org-babel-combine-header-arg-lists
-		 org-babel-common-header-args-w-values
-		 (progn
-		   (setq sym (intern (concat "org-babel-header-args:" lang)))
-		   (and (boundp sym) (eval sym))))))))))))
+    (let* ((lang-props
+	    (save-match-data
+	      (org-babel-parse-header-arguments
+	       (org-entry-get (point) (concat "header-args:" lang)
+			      'inherit))))
+	   (default-props
+	     (save-match-data
+	       (org-babel-parse-header-arguments
+		(org-entry-get (point) "header-args"
+			       'inherit))))
+	   (props
+	    (let (val sym)
+	      (org-babel-parse-multiple-vars
+	       (delq nil
+		     (mapcar
+		      (lambda (header-arg)
+			(and (setq val (org-entry-get (point) header-arg t))
+			     (cons (intern (concat ":" header-arg))
+				   (org-babel-read val))))
+		      (mapcar
+		       #'symbol-name
+		       (mapcar
+			#'car
+			(org-babel-combine-header-arg-lists
+			 org-babel-common-header-args-w-values
+			 (progn
+			   (setq sym (intern (concat "org-babel-header-args:" lang)))
+			   (and (boundp sym) (eval sym))))))))))))
+      (org-babel-merge-params props default-props lang-props))))
 
 
 (defvar org-src-preserve-indentation)
 (defvar org-src-preserve-indentation)
 (defun org-babel-parse-src-block-match ()
 (defun org-babel-parse-src-block-match ()
@@ -1338,7 +1350,7 @@ may be specified in the properties of the current outline entry."
               (buffer-string)))
               (buffer-string)))
 	  (org-babel-merge-params
 	  (org-babel-merge-params
 	   org-babel-default-header-args
 	   org-babel-default-header-args
-	   (if (boundp lang-headers) (eval lang-headers) nil)
+	   (when (boundp lang-headers) (eval lang-headers))
            (org-babel-params-from-properties lang)
            (org-babel-params-from-properties lang)
 	   (org-babel-parse-header-arguments
 	   (org-babel-parse-header-arguments
             (org-no-properties (or (match-string 4) ""))))
             (org-no-properties (or (match-string 4) ""))))