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
|
||||
'((:session . "none") (:results . "replace") (:exports . "code")
|
||||
(: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
|
||||
(org-babel-header-args-safe-fn org-babel-safe-header-args))
|
||||
|
||||
|
@ -583,6 +599,18 @@ the outer-most code block.")
|
|||
|
||||
(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)
|
||||
"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
|
||||
(if inline org-babel-default-inline-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
|
||||
;; If DATUM is provided, make sure we get node
|
||||
;; properties applicable to its location within
|
||||
|
|
|
@ -104,7 +104,7 @@ Assume point is at block opening line."
|
|||
(apply #'org-babel-merge-params
|
||||
org-babel-default-header-args
|
||||
(and (boundp lang-headers)
|
||||
(symbol-value lang-headers))
|
||||
(eval-default-headers lang-headers))
|
||||
(append (org-babel-params-from-properties lang)
|
||||
(list raw-params)))))))
|
||||
(setf hash (org-babel-sha1-hash info :export)))
|
||||
|
|
Loading…
Reference in New Issue