Sébastien Vauban wrote: > Hi Bastien and Luke, > Bastien wrote: >> Luke Crook <l...@balooga.com> writes: >>> Is it possible to specify estimated effort in something other than hours >>> (0.5, or 0:30)?
>> No, it's not possible right now. > But I second this idea: that'd be a great addition. Too often, we have to play > with figures such as 64:00 or 80:00 just to indicate 8 or 10 days... > Being able to specify suffixes like `d' for days or `w' for weeks would be > awesome. But I guess it's very, very complex, though. Turns out probably not, unless I've missed something. I think this set of patches does what's necessary to allow duration strings in effort properties. And as a bonus its backwards compatible to the old style. Try it and see if it works, if it does I'll roll it into a proper patch. diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 54de775..6634801 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -5319,7 +5319,7 @@ Any match of REMOVE-RE will be removed from TXT." (get-text-property 0 'org-marker txt))) (error nil))) (when effort - (setq neffort (org-hh:mm-string-to-minutes effort) + (setq neffort (org-duration-string-to-minutes effort) effort (setq effort (concat "[" effort "]" ))))) (when remove-re @@ -6046,7 +6046,7 @@ E looks like \"+<2:25\"." ((equal op ??) op) (t '=))) (list 'org-agenda-compare-effort (list 'quote op) - (org-hh:mm-string-to-minutes e)))) + (org-duration-string-to-minutes e)))) (defun org-agenda-compare-effort (op value) "Compare the effort of the current line with VALUE, using OP. diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 07cc952..0747210 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -486,7 +486,7 @@ If not, show simply the clocked time like 01:50." (m (- clocked-time (* 60 h)))) (if org-clock-effort (let* ((effort-in-minutes - (org-hh:mm-string-to-minutes org-clock-effort)) + (org-duration-string-to-minutes org-clock-effort)) (effort-h (floor effort-in-minutes 60)) (effort-m (- effort-in-minutes (* effort-h 60))) (work-done-str @@ -560,10 +560,10 @@ the mode line." ;; A string. See if it is a delta (setq sign (string-to-char value)) (if (member sign '(?- ?+)) - (setq current (org-hh:mm-string-to-minutes current) + (setq current (org-duration-string-to-minutes current) value (substring value 1)) (setq current 0)) - (setq value (org-hh:mm-string-to-minutes value)) + (setq value (org-duration-string-to-minutes value)) (if (equal ?- sign) (setq value (- current value)) (if (equal ?+ sign) (setq value (+ current value))))) @@ -580,7 +580,7 @@ the mode line." "Show notification if we spent more time than we estimated before. Notification is shown only once." (when (org-clocking-p) - (let ((effort-in-minutes (org-hh:mm-string-to-minutes org-clock-effort)) + (let ((effort-in-minutes (org-duration-string-to-minutes org-clock-effort)) (clocked-time (org-clock-get-clocked-time))) (if (setq org-task-overrun (if (or (null effort-in-minutes) (zerop effort-in-minutes)) diff --git a/lisp/org.el b/lisp/org.el index 82a0986..3e8fbba 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -15446,6 +15446,32 @@ If no number is found, the return value is 0." (string-to-number (match-string 1 s))) (t 0))) +(defun org-duration-string-to-minutes (s) + "Convert a duration string S to minutes. + +A bare number is interpreted as minutes, the following suffixes are +recognised: + h - hours + d - days + w - weeks (7 days) + m - months (30 days) + y - years (365 days) + +Entries containing a colon are interpreted as H:MM by +`org-hh:mm-string-to-minutes'." + (let ((conversion `(("h" . 60) + ("d" . ,(* 60 24)) + ("w" . ,(* 60 24 7)) + ("m" . ,(* 60 24 7 30)) + ("y" . ,(* 60 24 7 365)))) + (result 0)) + (while (string-match "\\([0-9]+\\)\\([hdwmy]\\)" s) + (incf result (* (cdr (assoc (match-string 2 s) conversion)) + (string-to-number (match-string 1 s)))) + (setq s (replace-match "" nil t s))) + (incf result (org-hh:mm-string-to-minutes s)) + result)) + ;;;; Files (defun org-save-all-org-buffers () -- Lawrence Mitchell <we...@gmx.li> _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode