emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [babel] Is there an elisp-way to see the header-arguments, that are passed to a #+call-line ?
@ 2012-02-05  9:13 Marc-Oliver Ihm
  2012-02-05 16:22 ` Eric Schulte
  0 siblings, 1 reply; 3+ messages in thread
From: Marc-Oliver Ihm @ 2012-02-05  9:13 UTC (permalink / raw)
  To: emacs-orgmode

Hi again,

is there an elisp-way to see the header-arguments, that are passed to a #+call-line ?

(This relates to my previous question "[babel] #+call-line removes hlines and headings ?", but has
  shifted in subject, so I would like to start a new thread, which can be understood on its own ...)

I have tried the internal variable "params", but that only gives me the header-arguments
of the #+begin_src-block and NOT of the #+call-line.

This is illustrated in the example below:

#+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,
 >

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-02-05 16:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-05  9:13 [babel] Is there an elisp-way to see the header-arguments, that are passed to a #+call-line ? Marc-Oliver Ihm
2012-02-05 16:22 ` Eric Schulte
2012-02-05 16:45   ` Marc-Oliver Ihm

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).