delete colnames/rownames for replaced variables

Thanks to Rick Frankel for help debugging this problem.

* lisp/ob-core.el (org-babel-merge-params): When merging parameters, if
  a variable is replaced with a new value, then delete colnames/rownames
  for the original value of that variable.
This commit is contained in:
Eric Schulte 2013-07-26 11:48:51 -06:00
parent 08cffc1c24
commit 3142297d69
1 changed files with 29 additions and 11 deletions

View File

@ -2269,7 +2269,8 @@ parameters when merging lists."
new-params))
result-params)
output)))
params results exports tangle noweb cache vars shebang comments padline)
params results exports tangle noweb cache vars shebang comments padline
clearnames)
(mapc
(lambda (plist)
@ -2286,21 +2287,25 @@ parameters when merging lists."
(setq vars
(append
(if (member name (mapcar #'car vars))
(delq nil
(mapcar
(lambda (p)
(unless (equal (car p) name) p))
vars))
(progn
(push name clearnames)
(delq nil
(mapcar
(lambda (p)
(unless (equal (car p) name) p))
vars)))
vars)
(list (cons name pair))))
;; if no name is given and we already have named variables
;; then assign to named variables in order
(if (and vars (nth variable-index vars))
(prog1 (setf (cddr (nth variable-index vars))
(concat (symbol-name
(car (nth variable-index vars)))
"=" (cdr pair)))
(incf variable-index))
(let ((name (car (nth variable-index vars))))
(push name clearnames) ; clear out colnames
; and rownames
; for replace vars
(prog1 (setf (cddr (nth variable-index vars))
(concat (symbol-name name) "=" (cdr pair)))
(incf variable-index)))
(error "Variable \"%s\" must be assigned a default value"
(cdr pair))))))
(:results
@ -2347,6 +2352,19 @@ parameters when merging lists."
plists)
(setq vars (reverse vars))
(while vars (setq params (cons (cons :var (cddr (pop vars))) params)))
;; clear out col-names and row-names for replaced variables
(mapc
(lambda (name)
(mapc
(lambda (param)
(setf (cdr (assoc param params))
(remove-if (lambda (pair) (equal (car pair) name))
(cdr (assoc param params))))
(setf params (remove-if (lambda (pair) (and (equal (car pair) param)
(null (cdr pair))))
params)))
(list :colname-names :rowname-names)))
clearnames)
(mapc
(lambda (hd)
(let ((key (intern (concat ":" (symbol-name hd))))