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_...@min} %timestamp_...@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!

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

-- 
Mikael Fornius

_______________________________________________
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 via email to