* [babel] BUG in call lines
@ 2012-03-22 8:42 Andreas Leha
2012-03-22 20:04 ` Marc-Oliver Ihm
2012-03-26 11:20 ` Eric Schulte
0 siblings, 2 replies; 3+ messages in thread
From: Andreas Leha @ 2012-03-22 8:42 UTC (permalink / raw)
To: emacs-orgmode
Hi all,
there seems to be a bug in call lines:
Suppose, I have a src block with two parameters:
#+name: insert_hline
#+header: :var fulltable=mytable() :var after_row=1
#+begin_src emacs-lisp
(let ((rrr (cons (quote hline) fulltable))
(bottomrows (nthcdr after_row fulltable))
(toprows (reverse (nthcdr (- (length fulltable) after_row) (reverse fulltable)))))
(setcdr rrr bottomrows)
(setcdr (nthcdr (- after_row 1) fulltable) rrr)
fulltable)
#+end_src
As first argument I would like to pass the results of a second
source block:
#+name: mytable
#+begin_src R
data.frame(par=1:3, val=1:3)
#+end_src
#+results: mytable
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
So, what I do is:
#+call: insert_hline(fulltable=mytable(),after_row=1) :hlines yes :colnames no
#+results: insert_hline(fulltable=mytable()
| 1 | 1 |
|---+---|
| 2 | 2 |
| 3 | 3 |
But the #+results: name is shortened.
So, the following won't produce another results block, but wrongly update
the block above:
#+call: insert_hline(fulltable=mytable(),after_row=2) :hlines yes :colnames no
The problem seems to be the ")" within the parameter list stopping
some parsing.
Note: This works as expected
#+call: insert_hline[:var fulltable=mytable() :var after_row=1]() :hlines yes :colnames no
#+results: insert_hline[:var fulltable=mytable() :var after_row=1]()
| 1 | 1 |
|---+---|
| 2 | 2 |
| 3 | 3 |
#+call: insert_hline[:var fulltable=mytable() :var after_row=2]() :hlines yes :colnames no
#+results: insert_hline[:var fulltable=mytable() :var after_row=2]()
| 1 | 1 |
| 2 | 2 |
|---+---|
| 3 | 3 |
Regards,
Andreas
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [babel] BUG in call lines
2012-03-22 8:42 [babel] BUG in call lines Andreas Leha
@ 2012-03-22 20:04 ` Marc-Oliver Ihm
2012-03-26 11:20 ` Eric Schulte
1 sibling, 0 replies; 3+ messages in thread
From: Marc-Oliver Ihm @ 2012-03-22 20:04 UTC (permalink / raw)
To: emacs-orgmode
Hi Andreas,
I think the behaviour you have discovered is governed by the constant org-babel-block-lob-one-liner-regexp;
However, tweaking this regular expression the right way seems to be really hard (impossible):
http://stackoverflow.com/questions/546433/regular-expression-to-match-outer-brackets
,so the only option seems to be to write a function to do the matching correctly,
but which is probably a big task ...
So as I understand things, I would recommend to stick with the current behaviour and use your workaround :-)
with kind regards, Marc
Am 22.03.2012 09:42, schrieb Andreas Leha:
> Hi all,
>
> there seems to be a bug in call lines:
>
> Suppose, I have a src block with two parameters:
>
> #+name: insert_hline
> #+header: :var fulltable=mytable() :var after_row=1
> #+begin_src emacs-lisp
> (let ((rrr (cons (quote hline) fulltable))
> (bottomrows (nthcdr after_row fulltable))
> (toprows (reverse (nthcdr (- (length fulltable) after_row) (reverse fulltable)))))
> (setcdr rrr bottomrows)
> (setcdr (nthcdr (- after_row 1) fulltable) rrr)
> fulltable)
> #+end_src
>
> As first argument I would like to pass the results of a second
> source block:
> #+name: mytable
> #+begin_src R
> data.frame(par=1:3, val=1:3)
> #+end_src
>
> #+results: mytable
> | 1 | 1 |
> | 2 | 2 |
> | 3 | 3 |
>
> So, what I do is:
>
> #+call: insert_hline(fulltable=mytable(),after_row=1) :hlines yes :colnames no
>
> #+results: insert_hline(fulltable=mytable()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> But the #+results: name is shortened.
>
> So, the following won't produce another results block, but wrongly update
> the block above:
> #+call: insert_hline(fulltable=mytable(),after_row=2) :hlines yes :colnames no
>
>
> The problem seems to be the ")" within the parameter list stopping
> some parsing.
>
> Note: This works as expected
> #+call: insert_hline[:var fulltable=mytable() :var after_row=1]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=1]()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> #+call: insert_hline[:var fulltable=mytable() :var after_row=2]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=2]()
> | 1 | 1 |
> | 2 | 2 |
> |---+---|
> | 3 | 3 |
>
>
> Regards,
> Andreas
>
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [babel] BUG in call lines
2012-03-22 8:42 [babel] BUG in call lines Andreas Leha
2012-03-22 20:04 ` Marc-Oliver Ihm
@ 2012-03-26 11:20 ` Eric Schulte
1 sibling, 0 replies; 3+ messages in thread
From: Eric Schulte @ 2012-03-26 11:20 UTC (permalink / raw)
To: Andreas Leha; +Cc: emacs-orgmode
Hi,
Thanks for reporting this bug. I've just pushed up a patch.
Cheers,
Andreas Leha <andreas.leha@med.uni-goettingen.de> writes:
> Hi all,
>
> there seems to be a bug in call lines:
>
> Suppose, I have a src block with two parameters:
>
> #+name: insert_hline
> #+header: :var fulltable=mytable() :var after_row=1
> #+begin_src emacs-lisp
> (let ((rrr (cons (quote hline) fulltable))
> (bottomrows (nthcdr after_row fulltable))
> (toprows (reverse (nthcdr (- (length fulltable) after_row) (reverse fulltable)))))
> (setcdr rrr bottomrows)
> (setcdr (nthcdr (- after_row 1) fulltable) rrr)
> fulltable)
> #+end_src
>
> As first argument I would like to pass the results of a second
> source block:
> #+name: mytable
> #+begin_src R
> data.frame(par=1:3, val=1:3)
> #+end_src
>
> #+results: mytable
> | 1 | 1 |
> | 2 | 2 |
> | 3 | 3 |
>
> So, what I do is:
>
> #+call: insert_hline(fulltable=mytable(),after_row=1) :hlines yes :colnames no
>
> #+results: insert_hline(fulltable=mytable()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> But the #+results: name is shortened.
>
> So, the following won't produce another results block, but wrongly update
> the block above:
> #+call: insert_hline(fulltable=mytable(),after_row=2) :hlines yes :colnames no
>
>
> The problem seems to be the ")" within the parameter list stopping
> some parsing.
>
> Note: This works as expected
> #+call: insert_hline[:var fulltable=mytable() :var after_row=1]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=1]()
> | 1 | 1 |
> |---+---|
> | 2 | 2 |
> | 3 | 3 |
>
> #+call: insert_hline[:var fulltable=mytable() :var after_row=2]() :hlines yes :colnames no
>
> #+results: insert_hline[:var fulltable=mytable() :var after_row=2]()
> | 1 | 1 |
> | 2 | 2 |
> |---+---|
> | 3 | 3 |
>
>
> Regards,
> Andreas
>
>
--
Eric Schulte
http://cs.unm.edu/~eschulte/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-03-26 14:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-22 8:42 [babel] BUG in call lines Andreas Leha
2012-03-22 20:04 ` Marc-Oliver Ihm
2012-03-26 11:20 ` Eric Schulte
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).