ob-core.el: Add ability to use closures as default header arguments
* lisp/ob-core.el (org-babel-default-header-args): Document ability to use functions. (eval-default-headers): New function to generate default header arguments, which adds the ability to evaluate function arguments at runtime. (org-babel-get-src-block-info): Use new header argument evaluate function when retreiving src block info. * lisp/ob-exp.el (org-babel-exp-src-block): Must use new eval-default-headers when exporting as well. The closures are evaluated at runtime.
This commit is contained in:
parent
1c83f6fa02
commit
78783f4e47
|
@ -472,7 +472,23 @@ For the format of SAFE-LIST, see `org-babel-safe-header-args'."
|
||||||
(defvar org-babel-default-header-args
|
(defvar org-babel-default-header-args
|
||||||
'((:session . "none") (:results . "replace") (:exports . "code")
|
'((:session . "none") (:results . "replace") (:exports . "code")
|
||||||
(:cache . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no"))
|
(:cache . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no"))
|
||||||
"Default arguments to use when evaluating a source block.")
|
"Default arguments to use when evaluating a source block.
|
||||||
|
|
||||||
|
This is a list in which each element is an alist. Each key
|
||||||
|
corresponds to a header argument, and each value to that header's
|
||||||
|
value. The value can either be a string or a closure that
|
||||||
|
evaluates to a string at runtime. For instance, imagine you'd
|
||||||
|
like to set the file name output of a latex source block to a
|
||||||
|
sha1 of its contents. We could achieve this with:
|
||||||
|
|
||||||
|
(defun org-src-sha ()
|
||||||
|
(let ((elem (org-element-at-point)))
|
||||||
|
(concat (sha1 (org-element-property :value elem)) \".svg\")))
|
||||||
|
|
||||||
|
(setq org-babel-default-header-args:latex
|
||||||
|
`((:results . \"file link replace\")
|
||||||
|
(:file . (lambda () (org-src-sha)))))")
|
||||||
|
|
||||||
(put 'org-babel-default-header-args 'safe-local-variable
|
(put 'org-babel-default-header-args 'safe-local-variable
|
||||||
(org-babel-header-args-safe-fn org-babel-safe-header-args))
|
(org-babel-header-args-safe-fn org-babel-safe-header-args))
|
||||||
|
|
||||||
|
@ -583,6 +599,18 @@ the outer-most code block.")
|
||||||
|
|
||||||
(defvar *this*)
|
(defvar *this*)
|
||||||
|
|
||||||
|
(defun eval-default-headers (headers)
|
||||||
|
"Compute default header list set with HEADERS.
|
||||||
|
|
||||||
|
Evaluate all default header arguments set to functions prior to
|
||||||
|
returning the list of header arguments."
|
||||||
|
(let ((lst nil))
|
||||||
|
(dolist (elem (eval headers t))
|
||||||
|
(if (listp (cdr elem))
|
||||||
|
(push `(,(car elem) . ,(funcall (cdr elem))) lst)
|
||||||
|
(push elem lst)))
|
||||||
|
lst))
|
||||||
|
|
||||||
(defun org-babel-get-src-block-info (&optional light datum)
|
(defun org-babel-get-src-block-info (&optional light datum)
|
||||||
"Extract information from a source block or inline source block.
|
"Extract information from a source block or inline source block.
|
||||||
|
|
||||||
|
@ -614,7 +642,7 @@ a list with the following pattern:
|
||||||
(apply #'org-babel-merge-params
|
(apply #'org-babel-merge-params
|
||||||
(if inline org-babel-default-inline-header-args
|
(if inline org-babel-default-inline-header-args
|
||||||
org-babel-default-header-args)
|
org-babel-default-header-args)
|
||||||
(and (boundp lang-headers) (eval lang-headers t))
|
(and (boundp lang-headers) (eval-default-headers lang-headers))
|
||||||
(append
|
(append
|
||||||
;; If DATUM is provided, make sure we get node
|
;; If DATUM is provided, make sure we get node
|
||||||
;; properties applicable to its location within
|
;; properties applicable to its location within
|
||||||
|
|
|
@ -104,7 +104,7 @@ Assume point is at block opening line."
|
||||||
(apply #'org-babel-merge-params
|
(apply #'org-babel-merge-params
|
||||||
org-babel-default-header-args
|
org-babel-default-header-args
|
||||||
(and (boundp lang-headers)
|
(and (boundp lang-headers)
|
||||||
(symbol-value lang-headers))
|
(eval-default-headers lang-headers))
|
||||||
(append (org-babel-params-from-properties lang)
|
(append (org-babel-params-from-properties lang)
|
||||||
(list raw-params)))))))
|
(list raw-params)))))))
|
||||||
(setf hash (org-babel-sha1-hash info :export)))
|
(setf hash (org-babel-sha1-hash info :export)))
|
||||||
|
|
Loading…
Reference in New Issue