emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Carsten Dominik <dominik@science.uva.nl>
To: Eric Schulte <schulte.eric@gmail.com>
Cc: Org-mode <emacs-orgmode@gnu.org>
Subject: Re: Feature-Request/Question: how to apply a calc/elisp function to a column in org-column-view
Date: Thu, 9 Oct 2008 07:35:57 +0200	[thread overview]
Message-ID: <66E0395D-1DA1-49FA-B33A-B22FC186EBAD@uva.nl> (raw)
In-Reply-To: <8763o21qf6.fsf@gmail.com>

Hi Eric,

one conceivable way out would be this:

First you do create a column view that does contain all the columns  
that you need, and then you use TBLFM to create additional columns  
with the desired results.  That will leave you with a table with all  
the values you need, but with a few columns too many, right?  You  
could then use the orgtbl send/receive mechanism to send this table to  
a different location in the same buffer.  On the way you can skip the  
columns you do not want, this is the :skip parameter to the orgtbl-to- 
generic translator function.  If that is not enough, you could write  
your own translator function which does do more complex operations.

Clearly a hack, and maybe you need to ask yourself if you want to do  
this kind of complex operations in Org-mode, or maybe if you are  
better off to use an external, full spreasheet program for this.

A completely independent way would be to implement a separate function  
that updates property values according to your formulas, so you could  
create additional properties this way, *before* you cal column view to  
extract the table.  Such a function would be easy to write if the  
formulas only connect values within a single entries, i.e. if they do  
not depend on children or parent values.  Such a function would be easy:

- Walk the outline tree
- At each stop check if you want to do a calculation, for example only  
do it
   if all properties that you need already exist.
- if yes, use org-entry-get to get the property values
- Do your calculation and put the result back into a new property.

For large outlines/tables, this is definitely going to be slow.  Org  
and column view are not optimized for large datasets.

HTH, for now.

- Carsten

On Oct 9, 2008, at 3:57 AM, Eric Schulte wrote:

> Hi,
>
> In columnview, I'm looking to be able to apply a calc/elisp function  
> to
> a columns values before the column view is generated.  This is
> specifically for columnviews captured in tables.
>
>  (see info:org:Capturing column view)
>
> This has come up before, and Carsten was nice enough to make it  
> possible
> to recalculate the column view automatically using an existing #+TBLFM
> line inside the columnview dynamic block.
>
> However, I would like to *replace* a column's value with a calculated
> result.  This is because I am sometimes storing very *large* lists as
> properties (large enough that Emacs chokes when trying to manage  
> tables
> with such large cells), and then trying to use columnview to generate
> tables of calculated properties of these lists.
>
> I realize that this is both an edge-case and a bastardization of the
> intended use of columnview, and I would be happy to put the required
> effort into implementing such a feature, but I have become tangled in
> the columnview code, and don't know where I should look to insert this
> functionality.
>
> I was thinking this should be part of either
> `org-dblock-write:columnview', or `org-columns', and then I noticed
> `org-columns-compute-all' which seemed promising but upon inspection  
> was
> somewhat opaque.
>
> Could anyone familiar with org-colview.el point me in the right
> direction?
>
> Should I just abandon the use of columnview for this task, and instead
> write an independent function which sucks in the properties and spits
> out the table?
>
> Many Thanks -- Eric
>
> As a "simple" example see below, I'd like to be able to generate the
> given table using the given #+COLUMNS line (or something like it)
>
> * example
>
> #+COLUMNS:  %ITEM %d %f %=f+d
> #+BEGIN: columnview :id "results"
> | ITEM        |  d | f | f+d |
> |-------------+----+---+-----|
> | *** Results |    |   |     |
> | **** run1   | 33 | 2 |  35 |
> | **** run2   | 34 | 2 |  36 |
> | **** run3   | 35 | 2 |  37 |
> | **** run4   | 36 | 2 |  38 |
> #+END:
>
>
> ** Results
>   :PROPERTIES:
>   :ID:       results
>   :END:
>
> *** run1
>   :PROPERTIES:
>   :d: 33
>   :f: 2
>   :END:
>
> *** run2
>   :PROPERTIES:
>   :d: 34
>   :f: 2
>   :END:
>
> *** run3
>   :PROPERTIES:
>   :d: 35
>   :f: 2
>   :END:
>
> *** run4
>   :PROPERTIES:
>   :d: 36
>   :f: 2
>   :END:
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Remember: use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

      reply	other threads:[~2008-10-09  5:36 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-09  1:57 Feature-Request/Question: how to apply a calc/elisp function to a column in org-column-view Eric Schulte
2008-10-09  5:35 ` Carsten Dominik [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=66E0395D-1DA1-49FA-B33A-B22FC186EBAD@uva.nl \
    --to=dominik@science.uva.nl \
    --cc=emacs-orgmode@gnu.org \
    --cc=schulte.eric@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).