From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: lisp/org-clock.el: Add param :properties to list properties in clocktable Date: Mon, 2 May 2011 11:33:33 +0200 Message-ID: <628944CC-2759-4E4F-B931-C140AFC9E6CF@gmail.com> References: <874o6pocat.fsf@gmail.com> Mime-Version: 1.0 (Apple Message framework v1084) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([140.186.70.92]:49255) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QGpVc-0005Ki-KB for emacs-orgmode@gnu.org; Mon, 02 May 2011 05:33:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QGpVa-0000TB-GP for emacs-orgmode@gnu.org; Mon, 02 May 2011 05:33:40 -0400 Received: from mail-ey0-f169.google.com ([209.85.215.169]:37220) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QGpVa-0000Sq-7I for emacs-orgmode@gnu.org; Mon, 02 May 2011 05:33:38 -0400 Received: by eyd9 with SMTP id 9so1896710eyd.0 for ; Mon, 02 May 2011 02:33:37 -0700 (PDT) In-Reply-To: <874o6pocat.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Niels Giesen Cc: Bernt Hansen , emacs-orgmode list Dear Niels, I am confused by the three patch pieces applied to the same file. Can you please resubmit, with a single patch, and a proper changelog-like entry? Thanks. - Carsten On Mar 26, 2011, at 9:29 PM, Niels Giesen wrote: >=20 > Here are a few patches to add property columns in clocktables. These > allow me e.g. to freely set different cost centers which is wanted @ > my work, and also possibly small descriptions. It is generically set > up so I reckon other people may find use in this too. >=20 > The patches together add two parameters to the dynamic block line: >=20 > : :properties ("prop-this" "prop-other") :inherit-props t >=20 > The property columns will be added at the left side of the existing > columns; I did experiment with adding them to the right, but because > of the variable number of levels (being defined both by :maxlevel and > the actual number of found levels), that did not work out well. >=20 > I used the parameter =3D:inherit-props=3D to set inheritance for > properties, as I have learned in the past that > =3Dorg-use-property-inheritance=3D should be used very sparingly. >=20 > #+begin_src diff > =46rom 20346cf661e2b9ba0b4a66b705809e6100d9e8e0 Mon Sep 17 00:00:00 = 2001 > From: Niels Giesen > Date: Sat, 26 Mar 2011 10:19:08 +0100 > Subject: [PATCH 1/3] org-clock: Add properties param handling to = `org-clock-get-table-data' >=20 > This param should be a list of strings referring to properties. Those > properties will be returned in an alist when found in an entry. > --- > lisp/org-clock.el | 14 +++++++++++--- > 1 files changed, 11 insertions(+), 3 deletions(-) >=20 > diff --git a/lisp/org-clock.el b/lisp/org-clock.el > index c567a26..df096d1 100644 > --- a/lisp/org-clock.el > +++ b/lisp/org-clock.el > @@ -1,6 +1,6 @@ > ;;; org-clock.el --- The time clocking code for Org-mode >=20 > -;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 > +;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 > ;; Free Software Foundation, Inc. >=20 > ;; Author: Carsten Dominik > @@ -2335,6 +2335,7 @@ TIME: The sum of all time spend in this = tree, in minutes. This time > (block (plist-get params :block)) > (link (plist-get params :link)) > (tags (plist-get params :tags)) > + (properties (plist-get params :properties)) > (matcher (if tags (cdr (org-make-tags-matcher tags)))) > cc range-text st p time level hdl props tsp tbl) >=20 > @@ -2388,8 +2389,15 @@ TIME: The sum of all time spend in this = tree, in minutes. This time > (or (cdr (assoc "SCHEDULED" props)) > (cdr (assoc "DEADLINE" props)) > (cdr (assoc "TIMESTAMP" props)) > - (cdr (assoc "TIMESTAMP_IA" props))))) > - (when (> time 0) (push (list level hdl tsp time) tbl)))))) > + (cdr (assoc "TIMESTAMP_IA" props)))) > + props (when properties > + (remove nil > + (mapcar > + (lambda (p) > + (when (org-entry-get (point) p) > + (cons p (org-entry-get (point) p)))) > + properties)))) > + (when (> time 0) (push (list level hdl tsp time props) = tbl)))))) > (setq tbl (nreverse tbl)) > (list file org-clock-file-total-minutes tbl)))) >=20 > --=20 > 1.7.1 > #+end_src >=20 > #+begin_src diff > =46rom a5da80e0b42256e1a1ea07e213bcae3685786589 Mon Sep 17 00:00:00 = 2001 > From: Niels Giesen > Date: Sat, 26 Mar 2011 11:05:33 +0100 > Subject: [PATCH 2/3] org-clock: Add properties param handling to = `org-clocktable-write-default' >=20 > Each property specified in properties will get a column in the = clocktable. > --- > lisp/org-clock.el | 10 ++++++++++ > 1 files changed, 10 insertions(+), 0 deletions(-) >=20 > diff --git a/lisp/org-clock.el b/lisp/org-clock.el > index df096d1..a330db0 100644 > --- a/lisp/org-clock.el > +++ b/lisp/org-clock.el > @@ -2052,6 +2052,7 @@ from the dynamic block defintion." > (emph (plist-get params :emphasize)) > (level-p (plist-get params :level)) > (timestamp (plist-get params :timestamp)) > + (properties (plist-get params :properties)) > (ntcol (max 1 (or (plist-get params :tcolumns) 100))) > (rm-file-column (plist-get params :one-file-with-archives)) > (indent (plist-get params :indent)) > @@ -2115,6 +2116,7 @@ from the dynamic block defintion." > (if multifile "|" "") ; file column, maybe > (if level-p "|" "") ; level column, maybe > (if timestamp "|" "") ; timestamp column, maybe > + (if properties (make-string (length properties) ?|) "") = ;properties columns, maybe > (format "<%d>| |\n" narrow))) ; headline and time columns >=20 > ;; Insert the table header line > @@ -2123,6 +2125,7 @@ from the dynamic block defintion." > (if multifile (concat (nth 1 lwords) "|") "") ; file column, = maybe > (if level-p (concat (nth 2 lwords) "|") "") ; level column, = maybe > (if timestamp (concat (nth 3 lwords) "|") "") ; timestamp = column, maybe > + (if properties (concat (mapconcat 'identity properties "|") = "|") "") ;properties columns, maybe > (concat (nth 4 lwords) "|"=20 > (nth 5 lwords) "|\n")) ; headline and = time columns >=20 > @@ -2134,6 +2137,7 @@ from the dynamic block defintion." > ; file column, maybe > (if level-p "|" "") ; level column, maybe > (if timestamp "|" "") ; timestamp column, maybe > + (if properties (make-string (length properties) ?|) "") = ;properties columns, maybe > (concat "*" (nth 7 lwords) "*| ") ; instead of a headline > "*" > (org-minutes-to-hh:mm-string (or total-time 0)) ; the time > @@ -2157,6 +2161,7 @@ from the dynamic block defintion." > (file-name-nondirectory (car tbl)) > (if level-p "| " "") ; level column, maybe > (if timestamp "| " "") ; timestamp column, maybe > + (if properties (make-string (length properties) = ?|) "") ;properties columns, maybe > (org-minutes-to-hh:mm-string (nth 1 tbl))))) ; = the time >=20 > ;; Get the list of node entries and iterate over it > @@ -2181,6 +2186,11 @@ from the dynamic block defintion." > (if multifile "|" "") ; free space for file name = column? > (if level-p (format "%d|" (car entry)) "") ; level, = maybe > (if timestamp (concat (nth 2 entry) "|") "") ; timestamp, = maybe > + (if properties > + (concat > + (mapconcat > + (lambda (p) (or (cdr (assoc p (nth 4 entry))) "")) > + properties "|") "|") "") ;properties columns, = maybe > (if indent (org-clocktable-indent-string level) "") ; = indentation > hlc headline hlc "|" ; = headline > (make-string (min (1- ntcol) (or (- level 1))) ?|) > --=20 > 1.7.1 > #+end_src >=20 > #+begin_src diff > =46rom e7b95ec4b61ada44d501e1212d3a3cb80e663911 Mon Sep 17 00:00:00 = 2001 > From: Niels Giesen > Date: Sat, 26 Mar 2011 14:48:21 +0100 > Subject: [PATCH 3/3] org-clock: Add param :inherit-props >=20 > When non-nil, properties are computed with inheritance. > --- > lisp/org-clock.el | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) >=20 > diff --git a/lisp/org-clock.el b/lisp/org-clock.el > index a330db0..1eecb68 100644 > --- a/lisp/org-clock.el > +++ b/lisp/org-clock.el > @@ -2346,6 +2346,7 @@ TIME: The sum of all time spend in this = tree, in minutes. This time > (link (plist-get params :link)) > (tags (plist-get params :tags)) > (properties (plist-get params :properties)) > + (inherit-property-p (plist-get params :inherit-props)) > (matcher (if tags (cdr (org-make-tags-matcher tags)))) > cc range-text st p time level hdl props tsp tbl) >=20 > @@ -2404,8 +2405,8 @@ TIME: The sum of all time spend in this = tree, in minutes. This time > (remove nil > (mapcar > (lambda (p) > - (when (org-entry-get (point) p) > - (cons p (org-entry-get (point) p)))) > + (when (org-entry-get (point) p = inherit-property-p) > + (cons p (org-entry-get (point) p = inherit-property-p)))) > properties)))) > (when (> time 0) (push (list level hdl tsp time props) = tbl)))))) > (setq tbl (nreverse tbl)) > --=20 > 1.7.1 > #+end_src >=20 > niels > -- > http://pft.github.com >=20 - Carsten