|
@@ -68,7 +68,7 @@
|
|
|
(declare-function orgtbl-to-orgtbl "org-table" (table params))
|
|
|
(declare-function org-babel-lob-get-info "ob-lob" nil)
|
|
|
(declare-function org-babel-ref-split-args "ob-ref" (arg-string))
|
|
|
-(declare-function org-babel-ref-parse "ob-ref" (assignment &optional params))
|
|
|
+(declare-function org-babel-ref-parse "ob-ref" (assignment))
|
|
|
(declare-function org-babel-lob-execute-maybe "ob-lob" ())
|
|
|
(declare-function org-number-sequence "org-compat" (from &optional to inc))
|
|
|
|
|
@@ -152,12 +152,6 @@ not match KEY should be returned."
|
|
|
(lambda (p) (when (funcall (if others #'not #'identity) (eq (car p) key)) p))
|
|
|
params)))
|
|
|
|
|
|
-(defun org-babel-expand-variables (params)
|
|
|
- "Expand variables in PARAMS."
|
|
|
- (append (mapcar (lambda (el) (cons :var (org-babel-ref-parse (cdr el))))
|
|
|
- (org-babel-get-header params :var))
|
|
|
- (org-babel-get-header params :var 'other)))
|
|
|
-
|
|
|
(defun org-babel-get-src-block-info (&optional light)
|
|
|
"Get information on the current source block.
|
|
|
|
|
@@ -193,9 +187,9 @@ Returns a list
|
|
|
(when (save-excursion (re-search-backward "[ \f\t\n\r\v]" nil t)
|
|
|
(looking-at org-babel-inline-src-block-regexp))
|
|
|
(setq info (org-babel-parse-inline-src-block-match))))
|
|
|
- ;; resolve variable references
|
|
|
+ ;; resolve variable references and add summary parameters
|
|
|
(when (and info (not light))
|
|
|
- (setf (nth 2 info) (org-babel-expand-variables (nth 2 info))))
|
|
|
+ (setf (nth 2 info) (org-babel-process-params (nth 2 info))))
|
|
|
(when info (append info (list name indent)))))
|
|
|
|
|
|
(defun org-babel-confirm-evaluate (info)
|
|
@@ -281,7 +275,7 @@ then run `org-babel-pop-to-session'."
|
|
|
|
|
|
(defconst org-babel-header-arg-names
|
|
|
'(cache cmdline colnames dir exports file noweb results
|
|
|
- session tangle var eval noeval comments)
|
|
|
+ session tangle var eval noeval comments)
|
|
|
"Common header arguments used by org-babel.
|
|
|
Note that individual languages may define their own language
|
|
|
specific header arguments as well.")
|
|
@@ -357,7 +351,10 @@ block."
|
|
|
(let ((info (or info (org-babel-get-src-block-info))))
|
|
|
(when (org-babel-confirm-evaluate info)
|
|
|
(let* ((lang (nth 0 info))
|
|
|
- (params (org-babel-merge-params (nth 2 info) params))
|
|
|
+ (params (if params
|
|
|
+ (org-babel-process-params
|
|
|
+ (org-babel-merge-params (nth 2 info) params))
|
|
|
+ (nth 2 info)))
|
|
|
(cache? (and (cdr (assoc :cache params))
|
|
|
(string= "yes" (cdr (assoc :cache params)))))
|
|
|
(params (setf (nth 2 info)
|
|
@@ -374,10 +371,6 @@ block."
|
|
|
(string= "yes" (cdr (assoc :noweb params))))
|
|
|
(org-babel-expand-noweb-references info)
|
|
|
(nth 1 info))))
|
|
|
- (result-params (split-string (or (cdr (assoc :results params)) "")))
|
|
|
- (result-type (cond ((member "output" result-params) 'output)
|
|
|
- ((member "value" result-params) 'value)
|
|
|
- (t 'value)))
|
|
|
(cmd (intern (concat "org-babel-execute:" lang)))
|
|
|
(dir (cdr (assoc :dir params)))
|
|
|
(default-directory
|
|
@@ -390,7 +383,7 @@ block."
|
|
|
result)
|
|
|
(unwind-protect
|
|
|
(flet ((call-process-region (&rest args)
|
|
|
- (apply 'org-babel-tramp-handle-call-process-region args)))
|
|
|
+ (apply 'org-babel-tramp-handle-call-process-region args)))
|
|
|
(unless (fboundp cmd)
|
|
|
(error "No org-babel-execute function for %s!" lang))
|
|
|
(if (and (not arg) new-hash (equal new-hash old-hash))
|
|
@@ -513,20 +506,20 @@ with a prefix argument then this is passed on to
|
|
|
|
|
|
;;;###autoload
|
|
|
(defun org-babel-switch-to-session-with-code (&optional arg info)
|
|
|
- "Switch to code buffer and display session."
|
|
|
- (interactive "P")
|
|
|
- (flet ((swap-windows
|
|
|
- ()
|
|
|
- (let ((other-window-buffer (window-buffer (next-window))))
|
|
|
- (set-window-buffer (next-window) (current-buffer))
|
|
|
- (set-window-buffer (selected-window) other-window-buffer))
|
|
|
- (other-window 1)))
|
|
|
- (let ((info (org-babel-get-src-block-info))
|
|
|
- (org-src-window-setup 'reorganize-frame))
|
|
|
- (save-excursion
|
|
|
- (org-babel-switch-to-session arg info))
|
|
|
- (org-edit-src-code))
|
|
|
- (swap-windows)))
|
|
|
+ "Switch to code buffer and display session."
|
|
|
+ (interactive "P")
|
|
|
+ (flet ((swap-windows
|
|
|
+ ()
|
|
|
+ (let ((other-window-buffer (window-buffer (next-window))))
|
|
|
+ (set-window-buffer (next-window) (current-buffer))
|
|
|
+ (set-window-buffer (selected-window) other-window-buffer))
|
|
|
+ (other-window 1)))
|
|
|
+ (let ((info (org-babel-get-src-block-info))
|
|
|
+ (org-src-window-setup 'reorganize-frame))
|
|
|
+ (save-excursion
|
|
|
+ (org-babel-switch-to-session arg info))
|
|
|
+ (org-edit-src-code))
|
|
|
+ (swap-windows)))
|
|
|
|
|
|
(defmacro org-babel-do-in-edit-buffer (&rest body)
|
|
|
"Evaluate BODY in edit buffer if there is a code block at point.
|
|
@@ -750,7 +743,7 @@ portions of results lines."
|
|
|
;; Remove overlays when changing major mode
|
|
|
(add-hook 'org-mode-hook
|
|
|
(lambda () (org-add-hook 'change-major-mode-hook
|
|
|
- 'org-babel-show-result-all 'append 'local)))
|
|
|
+ 'org-babel-show-result-all 'append 'local)))
|
|
|
|
|
|
(defmacro org-babel-map-src-blocks (file &rest body)
|
|
|
"Evaluate BODY forms on each source-block in FILE.
|
|
@@ -902,23 +895,27 @@ may be specified at the top of the current buffer."
|
|
|
(split-string (concat " " arg-string) "[ \f\t\n\r\v]+:" t)))))
|
|
|
|
|
|
(defun org-babel-process-params (params)
|
|
|
- "Parse params and resolve references.
|
|
|
-
|
|
|
-Return a list (session vars result-params result-type colnames rownames)."
|
|
|
- (let* ((session (cdr (assoc :session params)))
|
|
|
- (vars-and-names (org-babel-disassemble-tables
|
|
|
- (mapcar #'cdr (org-babel-get-header params :var))
|
|
|
- (cdr (assoc :hlines params))
|
|
|
- (cdr (assoc :colnames params))
|
|
|
- (cdr (assoc :rownames params))))
|
|
|
- (vars (car vars-and-names))
|
|
|
- (colnames (cadr vars-and-names))
|
|
|
- (rownames (caddr vars-and-names))
|
|
|
- (result-params (split-string (or (cdr (assoc :results params)) "")))
|
|
|
- (result-type (cond ((member "output" result-params) 'output)
|
|
|
- ((member "value" result-params) 'value)
|
|
|
- (t 'value))))
|
|
|
- (list session vars result-params result-type colnames rownames)))
|
|
|
+ "Expand variables in PARAMS and add summary parameters."
|
|
|
+ (let ((vars-and-names (org-babel-disassemble-tables
|
|
|
+ (mapcar
|
|
|
+ (lambda (el) (cons :var (if (consp (cdr el))
|
|
|
+ (cdr el)
|
|
|
+ (org-babel-ref-parse (cdr el)))))
|
|
|
+ (org-babel-get-header params :var))
|
|
|
+ (cdr (assoc :hlines params))
|
|
|
+ (cdr (assoc :colnames params))
|
|
|
+ (cdr (assoc :rownames params))))
|
|
|
+ (result-params (split-string (or (cdr (assoc :results params)) ""))))
|
|
|
+ (append
|
|
|
+ (car vars-and-names)
|
|
|
+ (list
|
|
|
+ (cons :colname-names (cadr vars-and-names))
|
|
|
+ (cons :rowname-names (caddr vars-and-names))
|
|
|
+ (cons :result-params result-params)
|
|
|
+ (cons :results-type (cond ((member "output" result-params) 'output)
|
|
|
+ ((member "value" result-params) 'value)
|
|
|
+ (t 'value))))
|
|
|
+ (org-babel-get-header params :var 'other))))
|
|
|
|
|
|
;; row and column names
|
|
|
(defun org-babel-del-hlines (table)
|
|
@@ -1667,8 +1664,7 @@ block but are passed literally to the \"example-block\"."
|
|
|
#'identity
|
|
|
(split-string
|
|
|
(if evaluate
|
|
|
- (let ((raw (org-babel-ref-resolve-reference
|
|
|
- source-name nil)))
|
|
|
+ (let ((raw (org-babel-ref-resolve source-name)))
|
|
|
(if (stringp raw) raw (format "%S" raw)))
|
|
|
(save-restriction
|
|
|
(widen)
|