From 761c6227e82c6e9f4d6ee701eaa0b532ac9c7916 Mon Sep 17 00:00:00 2001 Message-Id: <761c6227e82c6e9f4d6ee701eaa0b532ac9c7916.1621508858.git.yantar92@gmail.com> From: Ihor Radchenko Date: Thu, 20 May 2021 19:01:06 +0800 Subject: [PATCH] Allow :var header args to be assigned to cons cells * lisp/ob-core.el (org-babel-disassemble-tables, org-babel-gnuplot-process-vars): Use `proper-list-p' check instead of `listp'. (org-babel-disassemble-tables): Check list length before trying to remove hline from a table assignment. * testing/lisp/test-ob.el (test-ob/cons-cell-as-variable): Add the test. --- lisp/ob-core.el | 5 +++-- lisp/ob-gnuplot.el | 2 +- testing/lisp/test-ob.el | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 857e03e55..c04bec9ae 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -1684,9 +1684,10 @@ (defun org-babel-disassemble-tables (vars hlines colnames rownames) (list (mapcar (lambda (var) - (when (listp (cdr var)) + (when (proper-list-p (cdr var)) (when (and (not (equal colnames "no")) - (or colnames (and (eq (nth 1 (cdr var)) 'hline) + (or colnames (and (length> (cdr var) 1) + (eq (nth 1 (cdr var)) 'hline) (not (member 'hline (cddr (cdr var))))))) (let ((both (org-babel-get-colnames (cdr var)))) (setq cnames (cons (cons (car var) (cdr both)) diff --git a/lisp/ob-gnuplot.el b/lisp/ob-gnuplot.el index a9b8e65e5..ea7d29c4e 100644 --- a/lisp/ob-gnuplot.el +++ b/lisp/ob-gnuplot.el @@ -87,7 +87,7 @@ (defun org-babel-gnuplot-process-vars (params) (cons (car pair) ;; variable name (let* ((val (cdr pair)) ;; variable value - (lp (listp val))) + (lp (proper-list-p val))) (if lp (org-babel-gnuplot-table-to-data (let* ((first (car val)) diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el index 88ecb62b5..a5ae8e389 100644 --- a/testing/lisp/test-ob.el +++ b/testing/lisp/test-ob.el @@ -178,6 +178,22 @@ (ert-deftest test-ob/simple-variable-resolution () (point-at-bol) (point-at-eol)))))) +(ert-deftest test-ob/cons-cell-as-variable () + "Test that cons cell can be assigned as variable." + (org-test-with-temp-text " + +#+name: cons +#+begin_src emacs-lisp + (cons 1 2) +#+end_src + +#+begin_src emacs-lisp :var x=cons + x +#+end_src" + + (org-babel-next-src-block 2) + (should (equal (cons 1 2) (org-babel-execute-src-block))))) + (ert-deftest test-ob/multi-line-header-arguments () "Test that multi-line header arguments and can be read." (org-test-with-temp-text-in-file " -- 2.26.3