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
next prev parent 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).