From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rick Frankel Subject: [Bug] #+call does not respect :colnames argument Date: Fri, 26 Jul 2013 11:12:48 -0400 Message-ID: <1e44d3b3697f439e425399908547d946@mail.rickster.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52108) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2jhL-0006jS-Om for emacs-orgmode@gnu.org; Fri, 26 Jul 2013 11:12:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V2jhI-00054O-Bi for emacs-orgmode@gnu.org; Fri, 26 Jul 2013 11:12:51 -0400 Received: from [204.62.15.78] (port=42528 helo=mail.rickster.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2jhI-00054G-70 for emacs-orgmode@gnu.org; Fri, 26 Jul 2013 11:12:48 -0400 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: Eric Schulte Cc: emacs-orgmode Eric- I have debugged why the :colnames argument is not respected as to removing the header from a table var. * Given #+name: with-hline | A | B | C | |---+---+---| | 1 | 2 | 3 | | 4 | 5 | 6 | #+name: with-hline2 | B | C | D | |---+---+---| | 2 | 3 | 4 | | 5 | 6 | 7 | #+name: emacs-echo #+BEGIN_SRC emacs-lisp :var table=with-hline :colnames yes (mapcar (lambda (x) (mapcar '1+ x)) table) #+END_SRC #+call: emacs-echo(table=with-hline2)[:colnames yes] * Evaluation When the `#+call' line is executed, `org-babel-process-params' is called multiple times. When it is called the last time to process the actual input (here, calling =emacs-echo= with the param =with-hline2=), the `:colname-names' parameter has already been (to =(table "A" "B" "C")=, taken from the variable in the source blocks header) as a side-effect of the call to `org-babel-get-src-block-info'. So, when the block is executed later in the function, then next call to `org-babel-process-params' does not call disassemble table (taking into account the value of `:colnames') but uses =processed-vars= directly instead, causing the full table to be used without calling `org-babel-disassemble-tables'. Here's the relevant section of code from `org-babel-process-params': #+BEGIN_SRC emacs-lisp (if (and (assoc :colname-names params) (assoc :rowname-names params)) (list processed-vars) (org-babel-disassemble-tables processed-vars (cdr (assoc :hlines params)) (cdr (assoc :colnames params)) (cdr (assoc :rownames params)))) #+END_SRC And here's a cleaned-up debug trace: #+BEGIN_EXAMPLE (list processed-vars) ;; called again later in execute-src-block, does not properly parse =with-hline2= var org-babel-process-params(((:comments . "") (:shebang . "") (:cache . "no") (:padline . "") (:noweb . "no") (:tangle . "no") (:exports . "results") (:results . "silent") (:var . "table=with-hline2") (:hlines . "yes") (:padnewline . "yes") (:session . "none") (:colnames . "yes") (:result-type . value) (:result-params "replace") (:rowname-names) (:colname-names (table "A" "B" "C")))) ;; calls disassemble-tables and returns with :colname-names set org-babel-process-params(((:comments . "") (:shebang . "") (:cache . "no") (:padline . "") (:noweb . "no") (:tangle . "no") (:exports . "results") (:results . "replace") (:var . "table=with-hline") (:colnames . "yes") (:session . "none") (:padnewline . "yes") (:hlines . "yes"))) org-babel-get-src-block-info() org-babel-execute-src-block(nil nil ((:var . "table=with-hline2") (:results . "silent"))) org-babel-ref-resolve("emacs-echo(table=with-hline2)[:colnames yes]") org-babel-ref-parse("results=emacs-echo(table=with-hline2)[:colnames yes]") org-babel-process-params(((:comments . "") (:shebang . "") (:cache . "no") (:padline . "") (:noweb . "no") (:tangle . "no") (:exports . "results") (:results . "replace") (:var . "results=emacs-echo(table=with-hline2)[:colnames yes]") (:colnames . "no") (:hlines . "yes") (:padnewline . "yes") (:session . "none"))) org-babel-lob-execute(("emacs-echo(table=with-hline2)[:colnames yes]" nil 0 nil)) #+END_EXAMPLE rick