summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Schulte <schulte.eric@gmail.com>2010-07-21 16:11:49 -0700
committerEric Schulte <schulte.eric@gmail.com>2010-07-21 16:11:49 -0700
commit6f825152d992c8b21ac9a2cd3ee5d8f34ed985e5 (patch)
tree8034e07f32655b54524d6735c779f97035cfc5d4
parent917ad74b58a61321872e134a30279094f53fc02b (diff)
downloadorg-mode-6f825152d992c8b21ac9a2cd3ee5d8f34ed985e5.tar.gz
ob-table: babel scripts called from tables can accept ranges
* lisp/ob-table.el (sbe): now able to accept range references from tables
-rw-r--r--lisp/ob-table.el37
1 files changed, 27 insertions, 10 deletions
diff --git a/lisp/ob-table.el b/lisp/ob-table.el
index 90ce0ce..4a0454c 100644
--- a/lisp/ob-table.el
+++ b/lisp/ob-table.el
@@ -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"