diff options
Diffstat (limited to 'lisp/org/ob-table.el')
-rw-r--r-- | lisp/org/ob-table.el | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/lisp/org/ob-table.el b/lisp/org/ob-table.el index f1506550829..cdc7a6250fe 100644 --- a/lisp/org/ob-table.el +++ b/lisp/org/ob-table.el @@ -5,7 +5,7 @@ ;; Author: Eric Schulte ;; Keywords: literate programming, reproducible research ;; Homepage: http://orgmode.org -;; Version: 7.01 +;; Version: 7.3 ;; This file is part of GNU Emacs. @@ -79,13 +79,24 @@ references to source-code blocks, to force interpretation of a cell's value as a string, prefix the identifier with two \"$\"s rather than a single \"$\" (i.e. \"$$2\" instead of \"$2\" in the example above." - (let ((variables (mapcar - (lambda (var) - (if (and (= 3 (length var)) (eq (nth 1 var) '$)) - (list (car var) (format "\"%s\"" (last var))) - var)) - variables))) - (unless (stringp source-block) (setq source-block (symbol-name source-block))) + (let* (quote + (variables + (mapcar + (lambda (var) + ;; ensure that all cells prefixed with $'s are strings + (cons (car var) + (delq nil (mapcar + (lambda (el) + (if (eq '$ el) + (setq quote t) + (prog1 (if quote + (format "\"%s\"" el) + (org-babel-clean-text-properties el)) + (setq quote nil)))) + (cdr var))))) + variables))) + (unless (stringp source-block) + (setq source-block (symbol-name source-block))) (org-babel-table-truncate-at-newline ;; org-table cells can't be multi-line (if (and source-block (> (length source-block) 0)) (let ((params @@ -93,13 +104,18 @@ example above." (concat ":var results=" ,source-block "(" - (mapconcat (lambda (var-spec) - (format "%S=%s" (nth 0 var-spec) (nth 1 var-spec))) - ',variables ", ") + (mapconcat + (lambda (var-spec) + (if (> (length (cdr var-spec)) 1) + (format "%S='%S" + (car var-spec) + (mapcar #'read (cdr var-spec))) + (format "%S=%s" + (car var-spec) (cadr var-spec)))) + ',variables ", ") ")"))))) (org-babel-execute-src-block - nil (list "emacs-lisp" "results" - (org-babel-merge-params '((:results . "silent")) params)))) + nil (list "emacs-lisp" "results" params) '((:results . "silent")))) "")))) (provide 'ob-table) |