Hi James, 

this small patch against current org-colview.el lets you have a custom
function for computing a "summary" of a property and displaying it in
the column.

To compute the time since the timestamp, you can use this patch and some
of your code like this:

--8<---------------cut here---------------start------------->8---
(setq org-columns-custom-summary-function 
      'my-org-compute-since)

(defun org-time-since (time)
  "Get the number of days since `time'"
  (time-to-number-of-days 
  (time-since (apply 'encode-time
                     (org-parse-time-string time)))))

(defun my-org-compute-since (&rest values)
  "Eval elapsted days since the entry's timestamp."
  (let* ((ts (org-entry-get (point) "TIMESTAMP")))
    (when ts (org-time-since ts))))
--8<---------------cut here---------------end--------------->8---

This patch is just a workaround, though.  I think we should have a way
of adding more than one custom function, as Mikael Fornius suggested
when sending his first patch.

Let's see what's Carsten take on this.

Thanks!

diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index d132bf6..b312d35 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -698,20 +698,30 @@ around it."
 		(org-columns-display-here (cdr x)))
 	      cache)))))
 
+(defcustom org-columns-custom-summary-function nil
+  "A user-defined custom summary function.
+This function takes one argument: a list containing the values of
+all children for the summarized property.  This function should
+return a number."
+  :group 'org-link
+  :type 'function)
+
 (defvar org-columns-compile-map
-  '(("none"  none              +)
-    (":"     add_times         +)
-    ("+"     add_numbers       +)
-    ("$"     currency          +)
-    ("X"     checkbox          +)
-    ("X/"    checkbox-n-of-m   +)
-    ("X%"    checkbox-percent  +)
-    ("max"   max_numbers       max)
-    ("min"   min_numbers       min)
-    ("mean"  mean_numbers      (lambda (&rest x) (/ (apply '+ x) (float (length x)))))
-    (":max"  max_times         max)
-    (":min"  min_times         min)
-    (":mean" mean_times        (lambda (&rest x) (/ (apply '+ x) (float (length x))))))
+  '(("none"   none              +)
+    (":"      add_times         +)
+    ("+"      add_numbers       +)
+    ("$"      currency          +)
+    ("X"      checkbox          +)
+    ("X/"     checkbox-n-of-m   +)
+    ("X%"     checkbox-percent  +)
+    ("max"    max_numbers       max)
+    ("min"    min_numbers       min)
+    ("mean"   mean_numbers      (lambda (&rest x) (/ (apply '+ x) (float (length x)))))
+    (":max"   max_times         max)
+    (":min"   min_times         min)
+    (":mean"  mean_times        (lambda (&rest x) (/ (apply '+ x) (float (length x)))))
+    ("custom" custom_function   (lambda (&rest x) 
+				  (funcall org-columns-custom-summary-function x))))
   "Operator <-> format,function map.
 Used to compile/uncompile columns format and completing read in
 interactive function org-columns-new.")
-- 
 Bastien
_______________________________________________
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