From fe0532e5092a9271b94d065026fb3294582d4180 Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Tue, 21 Jul 2009 16:46:26 -0600 Subject: [PATCH] DONE One supplied, one default We are now skipping results lines when resolving references which specify arguments, as the arguments would change the value of the source-code block. --- lisp/org-babel-ref.el | 14 ++++++++------ lisp/org-babel.el | 3 ++- org-babel.org | 19 +++++++++++++++---- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/lisp/org-babel-ref.el b/lisp/org-babel-ref.el index c44bc3678..8bf0814ac 100644 --- a/lisp/org-babel-ref.el +++ b/lisp/org-babel-ref.el @@ -96,12 +96,12 @@ return nil." (when (string-match "^\\(.+?\\)\(\\(.*\\)\)$" ref) (setq new-refere (match-string 1 ref)) (setq new-referent (match-string 2 ref)) - (message (format "first second %S -- %S" new-refere new-referent)) ;; debugging + (message "new-refere=%S, new-referent=%S" new-refere new-referent) ;; debugging (when (> (length new-refere) 0) (if (> (length new-referent) 0) (setq args (mapcar (lambda (ref) (cons :var ref)) (split-string new-referent ",[ \f\t\n\r\v]*")))) - (message "nested args = %S" args) + (message "args=%S" args) (setq ref new-refere))) (when (string-match "\\(.+\\):\\(.+\\)" ref) (find-file (match-string 1 ref)) @@ -111,8 +111,10 @@ return nil." (regexp-quote ref) "[ \t]*$")) (regexp (concat "^#\\+SRCNAME:[ \t]*" (regexp-quote ref) "\\(\(.*\)\\)?" "[ \t]*$"))) - (or (re-search-forward result_regexp nil t) - (re-search-forward result_regexp nil t) + ;; goto ref in the current buffer + (or (and (not args) + (or (re-search-forward result_regexp nil t) + (re-search-forward result_regexp nil t))) (re-search-forward regexp nil t) (re-search-backward regexp nil t) ;; check the Library of Babel @@ -132,12 +134,12 @@ return nil." (beginning-of-line) (if (or (= (point) (point-min)) (= (point) (point-max))) (error "reference not found")))) + (message "type=%S" type) ;; debugging (case type ('results-line (org-babel-ref-read-result)) ('table (org-babel-ref-read-table)) ('source-block - (setq result (org-babel-execute-src-block - t nil (org-combine-plists args nil))) + (setq result (org-babel-execute-src-block t nil args)) (if (symbolp result) (format "%S" result) result)) ('lob (setq result (org-babel-execute-src-block t lob-info args))))))) diff --git a/lisp/org-babel.el b/lisp/org-babel.el index 7816df2e9..c07cf1011 100644 --- a/lisp/org-babel.el +++ b/lisp/org-babel.el @@ -159,6 +159,7 @@ Optionally supply a value for INFO in the form returned by Optionally supply a value for PARAMS which will be merged with the header arguments specified at the source code block." (interactive) + (message "supplied params=%S" params) (let* ((info (or info (org-babel-get-src-block-info))) (lang (first info)) (body (second info)) @@ -169,7 +170,7 @@ the header arguments specified at the source code block." (result-type (fourth processed-params)) (cmd (intern (concat "org-babel-execute:" lang))) result) - ;; (message "params=%S" params) ;; debugging statement + (message "params=%S" params) ;; debugging statement (unless (member lang org-babel-interpreters) (error "Language is not in `org-babel-interpreters': %s" lang)) (when arg (setq result-params (cons "silent" result-params))) diff --git a/org-babel.org b/org-babel.org index 63b755505..fe938e1d4 100644 --- a/org-babel.org +++ b/org-babel.org @@ -2357,7 +2357,7 @@ plot data using 1:2 with lines node.name += c #+end_src -*** discussion +*** discussion / investigation I believe that this issue should be addressed as a bug rather than as a point for new development. The code in [[file:lisp/org-babel-ref.el][org-babel-ref.el]] already resolves variable references in a recursive manner which *should* work @@ -2378,6 +2378,17 @@ resolution of nested arguments. We should capture this functionality in a test to ensure that we continue to test it as we move forward. I can take a look at implementing this once I get a chance. +Looks like the problem may be in [[file:lisp/org-babel.el::defun%20org%20babel%20merge%20params%20rest%20plists][org-babel-merge-params]], which seems +to be trampling the provided :vars values. + +Nope, now it seems that we are actually looking up the results line, +rather than the actual source-code block, which would make sense given +that the results-line will return the same value regardless of the +arguments supplied. See the output of this [[file:lisp/org-babel-ref.el::message%20type%20S%20type%20debugging][debug-statement]]. + +We need to be sure that we don't read from a =#+resname:= line when we +have a non-nil set of arguments. + **** demonstration After uncommenting the debugging statements located [[file:lisp/org-babel-ref.el::message%20format%20first%20second%20S%20S%20new%20refere%20new%20referent%20debugging][here]] and more importantly [[file:lisp/org-babel-ref.el::message%20nested%20args%20S%20args%20debugging][here]], we can see that the current reference code does @@ -2448,18 +2459,18 @@ a+b updated [[file:lisp/org-babel-lob.el::defvar%20org%20babel%20lob%20one%20liner%20regexp%20lob%20t%20n%20n%20t%20n][org-babel-lob-one-liner-regexp]] -****** TODO One supplied, one default +****** DONE One supplied, one default #+lob: adder1(a=0) #+resname: adder1(a=0) -: 30 ## should be 10 +: 20 #+lob: adder1(b=0) #+resname: adder1(b=0) -: 30 ## should be 10 +: 10 ****** TODO Both supplied #+lob: adder1(a=1,b=2)