diff --git a/lisp/org-babel-lob.el b/lisp/org-babel-lob.el index 2c8ff8165..fd2cf3269 100644 --- a/lisp/org-babel-lob.el +++ b/lisp/org-babel-lob.el @@ -48,6 +48,9 @@ add files to this list use the `org-babel-lob-ingest' command." (org-babel-map-source-blocks file (let ((source-name (intern (org-babel-get-src-block-name))) (info (org-babel-get-src-block-info))) + ;; remove :var elements from params + ;; (once we have a better way of combining parameter lists then we won't have to do this) + (setf (third info) (assq-delete-all :var (third info))) (setq org-babel-library-of-babel (cons (cons source-name info) (assq-delete-all source-name org-babel-library-of-babel)))))) diff --git a/lisp/org-babel-ref.el b/lisp/org-babel-ref.el index 2d6cb85b3..f647cb431 100644 --- a/lisp/org-babel-ref.el +++ b/lisp/org-babel-ref.el @@ -90,7 +90,7 @@ return nil." "Resolve the reference and return it's value" (save-excursion (let ((case-fold-search t) - type args new-refere new-referent result) + type args new-refere new-referent result lob-info) ;; assign any arguments to pass to source block (when (string-match "^\\(.+?\\)\(\\(.*\\)\)$" ref) (setq new-refere (match-string 1 ref)) @@ -112,7 +112,9 @@ return nil." (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))) + (re-search-backward regexp nil t) + ;; check the Library of Babel + (setq lob-info (cdr (assoc (intern ref) org-babel-library-of-babel))))) ;; ;; TODO: allow searching for names in other buffers ;; (setq id-loc (org-id-find ref 'marker) ;; buffer (marker-buffer id-loc) @@ -120,11 +122,13 @@ return nil." ;; (move-marker id-loc nil) (progn (message (format "reference '%s' not found in this buffer" ref)) (error (format "reference '%s' not found in this buffer" ref)))) - (while (not (setq type (org-babel-ref-at-ref-p))) - (forward-line 1) - (beginning-of-line) - (if (or (= (point) (point-min)) (= (point) (point-max))) - (error "reference not found"))) + (if lob-info + (setq type 'lob) + (while (not (setq type (org-babel-ref-at-ref-p))) + (forward-line 1) + (beginning-of-line) + (if (or (= (point) (point-min)) (= (point) (point-max))) + (error "reference not found")))) (case type ('table (mapcar (lambda (row) @@ -134,7 +138,8 @@ return nil." ('source-block (setq result (org-babel-execute-src-block t nil (org-combine-plists args nil))) - (if (symbolp result) (format "%S" result) result)))))) + (if (symbolp result) (format "%S" result) result)) + ('lob (setq result (org-babel-execute-src-block t lob-info args))))))) (defun org-babel-ref-at-ref-p () "Return the type of reference located at point or nil of none