From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Kelling Subject: Re: [PATCH] Fix error prone babel table output format detection Date: Thu, 01 May 2014 02:13:05 -0700 Message-ID: <87d2fxlv4u.fsf@treetowl.lan> References: <20140501065231.5AE63181A42@treetowl.lan> <8761lqrn5p.fsf@Rainer.invalid> <87eh0dnbot.fsf@treetowl.lan> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:54435) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wfn41-0003rd-VZ for emacs-orgmode@gnu.org; Thu, 01 May 2014 05:14:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wfn3x-0003hQ-75 for emacs-orgmode@gnu.org; Thu, 01 May 2014 05:13:57 -0400 Received: from out5-smtp.messagingengine.com ([66.111.4.29]:53467) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wfn3w-0003hE-UW for emacs-orgmode@gnu.org; Thu, 01 May 2014 05:13:53 -0400 In-Reply-To: <87eh0dnbot.fsf@treetowl.lan> (Ian Kelling's message of "Thu, 01 May 2014 01:30:10 -0700") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Achim Gratz Cc: emacs-orgmode@gnu.org Ian Kelling writes: > Achim Gratz writes: > >> Ian Kelling writes: >>> org-babel table output uses different formatting for a list of lists, >>> but detects it incorrectly causing an error, as in this example: >>> #+begin_src emacs-lisp >>> '((1) 2) >>> #+end_src >> >> So this isn't a proper table, what do you expect to happen? > > I expect to be able to emacs -q, make an org mode buffer containing > that block, do ctrl-c c on it, and not have an error message pop up and > fail to have any output. What is improper about it? Would it be better > if org did not try to format it as a table? Actually, I see what you mean by improper. > >> >>> - (and (listp (car result)) >>> - (listp (cdr (car result))))) >>> + (cl-every 'listp result)) >> >> This is wrong, because a table can come with any number of 'hline >> symbols, so ostensibly not every element will be a listp. > > Yes, I agree. It will have to test if elements are listp or hline. > > >> Besides, you >> can't use cl-every unless Org drops backwards compatibility with older >> Emacsen or mandates cl-lib to be present. Even then, you'd also need to >> require cl-extra. > > I forgot about the multiple parts of cl. I originally wrote it without, > and can change it. Below is a patch that addresses the 2 previously mentioned problems. -- >8 -- Subject: [PATCH] Fix error prone babel table output format detection * lisp/ob-core.el: Test that all elements are in a list are lists or 'hline instead of just the first. org-babel table output uses different formatting for a list of lists, but detects it incorrectly causing an error, as in this example: #+begin_src emacs-lisp '((1) 2) #+end_src --- lisp/ob-core.el | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 1348f04..b5b0bc7 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -2184,9 +2184,16 @@ code ---- the results are extracted in the syntax of the source ((funcall proper-list-p result) (goto-char beg) (insert (concat (orgtbl-to-orgtbl - (if (or (eq 'hline (car result)) - (and (listp (car result)) - (listp (cdr (car result))))) + (if (let ((len (length result)) + (proper t) + (i 0) + elem) + (while (and proper (< i len )) + (setq elem (nth i result)) + (unless (or (listp elem) (eq elem 'hline)) + (setq proper nil)) + (setq i (1+ i))) + proper) result (list result)) '(:fmt (lambda (cell) (format "%s" cell)))) "\n")) (goto-char beg) (when (org-at-table-p) (org-table-align))) -- 1.7.10.4