* ob-table.el (org-sbe): Add an explicit case for handling list
arguments. This avoids doing the wrong thing (%s-formatting a list,
thus losing syntax like double-quotes). This enables passing org-table
ranges through org-sbe in a simple and correct manner.
* test-ob-table.el: Add test.
---
lisp/ob-table.el | 17 +++++++++++------
testing/lisp/test-ob-table.el | 23 +++++++++++++++++++++++
2 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/lisp/ob-table.el b/lisp/ob-table.el
index 105aca5e2..17810dd74 100644
--- a/lisp/ob-table.el
+++ b/lisp/ob-table.el
@@ -132,12 +132,17 @@ as shown in the example below.
"("
(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))))
+ (cond
+ ((> (length (cdr var-spec)) 1)
+ (format "%S='%S"
+ (car var-spec)
+ (mapcar #'read (cdr var-spec))))
+ ((stringp (cadr var-spec))
+ (format "%S=%s"
+ (car var-spec) (cadr var-spec)))
+ (t
+ (format "%S=%S"
+ (car var-spec) (cadr
var-spec)))))
',variables ", ")
")")))))
(org-babel-execute-src-block
diff --git a/testing/lisp/test-ob-table.el b/testing/lisp/test-ob-table.el
index 3d9b1d160..fb6d05796 100644
--- a/testing/lisp/test-ob-table.el
+++ b/testing/lisp/test-ob-table.el
@@ -52,6 +52,29 @@
1
"#+TBLFM: $2 = '(org-sbe identity (x $$1))"))
+(ert-deftest test-ob-table/sbe-list ()
+ "Test that `org-sbe' can correctly handle ranges as lists."
+ (org-test-table-target-expect
+ "
+#+name: concat
+#+begin_src emacs-lisp :eval yes
+ (mapconcat #'identity x \"\")
+#+end_src
+
+| foo | bar | replace |
+"
+ "
+#+name: concat
+#+begin_src emacs-lisp :eval yes
+ (mapconcat #'identity x \"\")
+#+end_src
+
+| foo | bar | foobar |
+"
+ 1
+ "#+TBLFM: $3 = '(org-sbe concat (x (list $1..$2)))"
+ "#+TBLFM: $3 = '(org-sbe concat (x $ (list $1..$2)))"))
+
(provide 'test-ob-table)
;;; test-ob-table.el ends here
--
2.16.2