Rick Frankel writes: > 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 Hi Rick, Thanks for taking the time to find the root of this problem. I believe I've fixed this by change the `org-babel-merge-params' function so that when the value of a variable is update, then colname-names and rowname-names values saved for that variable are removed. In my local tests the attached patch fixes this issue. If it works for you as well then I'll apply it. Thanks,