>From b2cdde739e4ed552b5cd4c30d62fb4215656d603 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Tue, 16 Aug 2011 16:21:31 +0200 Subject: [PATCH] New option `org-properties-postprocess-alist'. * org.el (org-properties-postprocess-alist): New option to allow postprocessing the values of properties set through `org-set-property'. (org-set-property): Use this option. This is inspired by a request from Pascal Mattia. --- lisp/org.el | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 318339a..dbefab1 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -2967,6 +2967,28 @@ lined-up with respect to each other." :group 'org-properties :type 'string) +(defcustom org-properties-postprocess-alist nil + "Alist of properties and functions to adjust inserted values. +Elements of this alist must be of the form + + ([string] [function]) + +where [string] must be a property name and [function] must be a +lambda expression: this lambda expression must take one argument, +the value to adjust, and return the new value as a string. + +For example, this element will allow the property \"Remaining\" +to be updated wrt the relation between the \"Effort\" property +and the clock summary: + + ((\"Remaining\" (lambda(value) + (let ((clocksum (org-clock-sum-current-item)) + (effort (org-duration-string-to-minutes + (org-entry-get (point) \"Effort\")))) + (org-minutes-to-hh:mm-string (- effort clocksum))))))" + :group 'org-properties + :type 'alist) + (defcustom org-use-property-inheritance nil "Non-nil means properties apply also for sublevels. @@ -14228,6 +14250,9 @@ in the current file." (let* ((property (or property (org-read-property-name))) (value (or value (org-read-property-value property)))) (setq org-last-set-property property) + ;; Possibly postprocess the inserted value: + (when (assoc property org-properties-postprocess-alist) + (setq value (funcall (cadr fn) value))) (unless (equal (org-entry-get nil property) value) (org-entry-put nil property value)))) -- 1.7.5.2