From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik 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 Message-ID: <66E0395D-1DA1-49FA-B33A-B22FC186EBAD@uva.nl> References: <8763o21qf6.fsf@gmail.com> Mime-Version: 1.0 (Apple Message framework v929.2) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KnoBw-0000Um-JK for emacs-orgmode@gnu.org; Thu, 09 Oct 2008 01:36:04 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KnoBu-0000Ua-BG for emacs-orgmode@gnu.org; Thu, 09 Oct 2008 01:36:03 -0400 Received: from [199.232.76.173] (port=49818 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KnoBu-0000UX-2C for emacs-orgmode@gnu.org; Thu, 09 Oct 2008 01:36:02 -0400 Received: from nf-out-0910.google.com ([64.233.182.186]:37855) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KnoBt-0006cJ-Mk for emacs-orgmode@gnu.org; Thu, 09 Oct 2008 01:36:01 -0400 Received: by nf-out-0910.google.com with SMTP id c7so1824902nfi.26 for ; Wed, 08 Oct 2008 22:36:00 -0700 (PDT) In-Reply-To: <8763o21qf6.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric Schulte Cc: Org-mode 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