|
@@ -79,13 +79,25 @@ 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,9 +105,14 @@ 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"
|