emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Mikael Fornius <mfo@abc.se>
To: James TD Smith <ahktenzero@mohorovi.cc>
Cc: emacs-orgmode@gnu.org, Carsten Dominik <carsten.dominik@gmail.com>
Subject: Re: [PATCH] Add min/max/mean age operators to column view.
Date: Sat, 31 Oct 2009 14:41:25 +0100	[thread overview]
Message-ID: <87k4ybel4q.fsf@eee.in> (raw)
In-Reply-To: 20091029211543.GZ72276@yog-sothoth.mohorovi.cc

[-- Attachment #1: Type: text/plain, Size: 2401 bytes --]


Thanks for a very good explanation, now I understand and I have tested
it successfully. Looks like it works perfectly well to me. 

The interactive function org-columns-new also works as expected. 

This is a very good addition and I think it can be useful in many
different areas. It also opens for more advanced calculations in colview
mode due to the extension of `org-columns-compile-map'.

Personally I prefer using colview to tables for temporary views of
dynamic and alive data (like my running exercise diary) and want to use
it more then I do now.

I have modified the patch with one missing parenthesis and a more
extensive documentation string to the important variable
`org-columns-format-compile-map' which I wrote most for my own
recapitulation of the subject and understanding your patch. 

Also org-columns-new had a reference to free variable `funcs' and I
changed it to `fun' (member of functions argument list) which I believe
is the right one?, you have to check me on this.

Two other references, probably older, to free variables I have also
tried to fix by let binding them.

Feel free to use it if you want. (Attached patch to this messages.
Difference is against your misc-new-features branch pulled today.)



As an ending parenthesis commenting column view in general:

I see three small problems with org-colview that I (or someone else
interested) should fix some day:

1. A annoying problem is not being able to have multiple columns
   summarizing the same property but with different operators.
   
   #+COLUMNS: %TIMESTAMP_IA{@min} %TIMESTAMP_IA{@max}

   This will result only in min calculations for both columns. 

   I remember that I have looked at this before and think it is non
   trivial to fix because of the internal way data is collected and
   calculated. Almost a rewrite of this part is necessary.

2. Being able to use Emacs calc HMS forms

   (info "(Calc) HMS forms")
   
   for calculating and presenting time as I can to in the org-mode
   spreadsheet. I use this time format to manipulate my exercise data
   now days. Maybe this be added easily with the new `calc' slot in the
   `org-columns-compile-map' structure.

3. More intelligent handling of property values like automatic detection
   of times, dates or numbers to simplify the definitions and have only
   one 'max' summary option instead of now three (max, :max, @max).

   
Cheers!


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-patch, Size: 2716 bytes --]

diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index 2c16d0b..ba99ff7 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -733,10 +733,20 @@ around it."
     ("@max" max_age max (lambda (x) (- org-columns-time x)))
     ("@mean" mean_age
      (lambda (&rest x) (/ (apply '+ x) (float (length x))))
-     (lambda (x) (- org-columns-time x)))
-  "Operator <-> format,function map.
+     (lambda (x) (- org-columns-time x))))
+  "Operator <-> format,function,calc  map.
 Used to compile/uncompile columns format and completing read in
-interactive function org-columns-new.")
+interactive function org-columns-new.
+
+operator    string used in #+COLUMNS definition describing the
+            summary type
+format      symbol describing summary type selected interactively in
+            org-columns-new and internally in
+            org-columns-number-to-string and
+            org-columns-string-to-number 
+function    called with a list of values as argument to calculate
+            the summary value
+calc        function called on every element before summarizing")
 
 (defun org-columns-new (&optional prop title width op fmt fun &rest rest)
   "Insert a new column, to the left of the current column."
@@ -757,7 +767,7 @@ interactive function org-columns-new.")
 		       org-columns-compile-map)
 	       nil t))
     (setq fmt (intern fmt)
-	  funcs (cdr (assoc fmt (mapcar 'cdr org-columns-compile-map))))
+	  fun (cdr (assoc fmt (mapcar 'cdr org-columns-compile-map))))
     (if (eq fmt 'none) (setq fmt nil))
     (if editp
 	(progn
@@ -766,7 +776,7 @@ interactive function org-columns-new.")
       (setq cell (nthcdr (1- (current-column))
 			 org-columns-current-fmt-compiled))
       (setcdr cell (cons (list prop title width nil fmt nil
-			       (car funcs) (cadr funcs))
+			       (car fun) (cadr fun))
 			 (cdr cell))))
     (org-columns-store-format)
     (org-columns-redo)))
@@ -1050,7 +1060,7 @@ Don't set this, this is meant for dynamic scoping.")
 
 (defun org-columns-uncompile-format (cfmt)
   "Turn the compiled columns format back into a string representation."
-  (let ((rtn "") e s prop title op op-match width fmt printf fun)
+  (let ((rtn "") e s prop title op op-match width fmt printf fun calc)
     (while (setq e (pop cfmt))
       (setq prop (car e)
 	    title (nth 1 e)
@@ -1295,7 +1305,7 @@ and tailing newline characters."
   (org-columns-remove-overlays)
   (move-marker org-columns-begin-marker (point))
   (let ((org-columns-time (time-to-number-of-days (current-time)))
-	 cache maxwidths m p a d)
+	 cache maxwidths m p a d fmt)
     (cond
      ((and (boundp 'org-agenda-overriding-columns-format)
 	   org-agenda-overriding-columns-format)

[-- Attachment #3: Type: text/plain, Size: 145 bytes --]


(And don't forget to patch the bastard colview-xemacs ;-), could be made
effectively with a ediff manual merging I think.)

-- 
Mikael Fornius


[-- Attachment #4: Type: text/plain, Size: 204 bytes --]

_______________________________________________
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:[~2009-10-31 13:40 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-26  0:04 [PATCH] Add min/max/mean age operators to column view James TD Smith
2009-10-28 17:01 ` Carsten Dominik
2009-10-28 19:36   ` James TD Smith
2009-10-29 11:12     ` Mikael Fornius
2009-10-29 13:17       ` Mikael Fornius
2009-10-29 20:10         ` Mikael Fornius
2009-10-30  3:36           ` James TD Smith
2009-10-29 21:15         ` James TD Smith
2009-10-31 13:41           ` Mikael Fornius [this message]
2009-11-01 17:24             ` Carsten Dominik
2009-11-01 18:59               ` James TD Smith
2009-12-30 11:32                 ` Manish
2009-12-30 14:01                   ` James TD Smith

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=87k4ybel4q.fsf@eee.in \
    --to=mfo@abc.se \
    --cc=ahktenzero@mohorovi.cc \
    --cc=carsten.dominik@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /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).