> > #+call: parameters() :colnames yes > > #+results: parameters() > | :colname-names | nil | > |----------------+------------------| > | :rowname-names | nil | > | :result-params | (silent replace) | > | :result-type | value | > | :comments | | > | :shebang | | > | :cache | no | > | :padline | | > | :noweb | no | > | :tangle | no | > | :exports | code | > | :results | silent | > | :session | none | > | :padnewline | yes | > | :hlines | yes | > | :colnames | no | > | :result-type | value | > | :result-params | (replace) | > | :rowname-names | nil | > | :colname-names | nil | > > #+name: parameters > #+begin_src emacs-lisp > (mapcar (lambda (x) (list (car x) (cdr x))) params) > #+end_src > > #+results: parameters > | :colname-names | nil | > | :rowname-names | nil | > | :result-params | (replace) | > | :result-type | value | > | :comments | | > | :shebang | | > | :cache | no | > | :padline | | > | :noweb | no | > | :tangle | no | > | :exports | code | > | :results | replace | > | :colnames | no | > | :hlines | yes | > | :padnewline | yes | > | :session | none | > > > The #+call line calls a #+begin_src-block named "parameters", which simple dumps the > content of the params-variable, which contains all the header arguments. > > If I pass ":colnames yes" as a header argument, I nevertheless get dumped "no" in the example ! > This is probably because the #+begin_src-block only has only access to its > own header-arguments (via the variable "params"). > > Therefore my question: > > Is there any way to access the header-arguments of the #+call-line within the #+begin_src-block ? > Maybe with the "params" variable or maybe any other way ? > > The reason I need to know this: The value of the header-argument ":colnames" of the #+call-line > governs, whether the #+begin_src-block is expected to return a table with or without column-names; > so to react accordingly (and not surprise users) I need to know within the #+begin_src-block > the value of the ":colnames" header-argument from the #+call-line. > > Thanx a lot ! > > with kind regards, Marc-Oliver Ihm > > P.s.: Possible solutions I can think of: > - Access the variable "params" not from the local scope but from the outer scope, however > I do not know, if elisp allows this. > - Pass the header-arguments of the #+call-line to the #+begin_src-block, but this would probably > require a patch to babel. > - Something even more elegant I just cannot figure out :-) > > Am 30.01.2012 17:10, schrieb Eric Schulte: > > > > > To explain the cause (if not rationale) for the current behavior; when > > executing a call line, an ephemeral code block is created at the point > > of the call line. The result of the called function is passed into this > > ephemeral block, and the output of the block is inserted into the > > buffer. > > > > This is why call lines have *two* possible sets of header arguments, one > > to pass to the original called code block, and one for local effect in > > the ephemeral block. > > > > The reason the colnames header argument is required for the call line > > and not the code block, is because hlines are only stripped when data > > passes *into* a code block as a variable. In this case the 'hlines are > > stripped when the table passes into the ephemeral code blocks. > > > > Hope the above is more illuminating that confusing, > > > > > -- Eric Schulte http://cs.unm.edu/~eschulte/