diff options
author | Bastien Guerry <bzg@altern.org> | 2011-08-16 16:21:31 +0200 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2011-08-17 11:11:41 +0200 |
commit | eb4b0358155c91bdb7071ad455f011d2fe629b97 (patch) | |
tree | c86b441d5ebbddce129e5e53e6c16f3ed16ef267 | |
parent | 436290bfabde71dfcd4e3a9a6d9402c0ea343912 (diff) | |
download | org-mode-eb4b0358155c91bdb7071ad455f011d2fe629b97.tar.gz |
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.
-rw-r--r-- | lisp/org.el | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lisp/org.el b/lisp/org.el index 1c11303..fe05ff9 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. @@ -14239,6 +14261,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)))) |