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