[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Orgmode] Re: Does Effort support hours only?
From: |
Lawrence Mitchell |
Subject: |
[Orgmode] Re: Does Effort support hours only? |
Date: |
Fri, 18 Feb 2011 10:51:58 +0000 |
User-agent: |
Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) |
Sébastien Vauban wrote:
> Hi Bastien and Luke,
> Bastien wrote:
>> Luke Crook <address@hidden> 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 <address@hidden>
[O] [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?), Lawrence Mitchell, 2011/02/28