emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Wishlist: allow range of table elements to be filled by sbe


From: Eric Schulte
Subject: Re: [O] Wishlist: allow range of table elements to be filled by sbe
Date: Fri, 19 Aug 2011 07:17:47 -0600
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

András Major <address@hidden> writes:

> Hi,
>
> I'd like to use a babel code block to fill a table with values.  The
> sbe elisp function looks like the right thing for this task, but it
> appears that the result of the code block always goes into a single
> cell of a table.  I can specify ranges of values, but then the entire
> output is placed into each of the specified cells.
>
> Here is how I imagine things should work:
>
> #+srcname: shcode
> #+begin_src sh :exports output table silent
>   echo "1 2 3"
> #+end_src
>
> | 1 | 2 | 3 |
> #+TBLFM: $1..$3='(sbe shcode)
>
> Note that this is *NOT* real output from the code block in the current
> version of org-mode, it's what I want it to be.  There are two things
> that cause this to break at the moment:
>
> - The range $1..$3 doesn't work, I have to prepend a row specifier as
>   in @<$1..@>$3 or suchlike, which is rather counterintuitive but
>   seems to work.
>
> - The output "1 2 3" are not separated into the various cells but all
>   placed into each cell.
>
> Or am I doing something wrong here?
>

sbe is just an elisp function which is called by the Org-mode
spreadsheet's function evaluation mechanisms.  The spreadsheet does not
allow for insertion of results into multiple cells and thus neither does
the use of sbe.  I would recommend a solution like the following, which
reads the /entire/ table into a code block, and writes the results out
in place.

#+results: this-is-the-table
| 1 | 4 | 7 |
| 2 | 5 | 8 |
| 3 | 6 | 9 |

#+source: this-is-the-table
#+begin_src emacs-lisp :var table=this-is-the-table
  (mapcar (lambda (row) (mapcar (lambda (cell) (* cell 2)) row)) table)
#+end_src

Every time the code block is evaluated multiple cells in the table are
changed.  To only set specific table values use of the `setf' macro
would probably be more appropriate.

Hope this helps -- Eric

-- 
Eric Schulte
http://cs.unm.edu/~eschulte/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]