* Does Effort support hours only?
@ 2011-02-17 19:47 Luke Crook
2011-02-18 9:02 ` Bastien
2011-02-28 11:43 ` [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?) Lawrence Mitchell
0 siblings, 2 replies; 9+ messages in thread
From: Luke Crook @ 2011-02-17 19:47 UTC (permalink / raw)
To: emacs-orgmode
Is it possible to specify estimated effort in something other
than hours (0.5, or 0:30)?
For example 1w, 1m, 2d etc?
-Luke
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Does Effort support hours only?
2011-02-17 19:47 Does Effort support hours only? Luke Crook
@ 2011-02-18 9:02 ` Bastien
2011-02-18 9:48 ` Sébastien Vauban
2011-02-28 11:43 ` [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?) Lawrence Mitchell
1 sibling, 1 reply; 9+ messages in thread
From: Bastien @ 2011-02-18 9:02 UTC (permalink / raw)
To: Luke Crook; +Cc: emacs-orgmode
Hi Luke,
Luke Crook <luke@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.
--
Bastien
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Does Effort support hours only?
2011-02-18 9:02 ` Bastien
@ 2011-02-18 9:48 ` Sébastien Vauban
2011-02-18 10:51 ` Lawrence Mitchell
0 siblings, 1 reply; 9+ messages in thread
From: Sébastien Vauban @ 2011-02-18 9:48 UTC (permalink / raw)
To: emacs-orgmode-mXXj517/zsQ
Hi Bastien and Luke,
Bastien wrote:
> Luke Crook <luke-bul7fGZb+kRBDgjK7y7TUQ@public.gmane.org> 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.
Best regards,
Seb
--
Sébastien Vauban
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode-mXXj517/zsQ@public.gmane.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Does Effort support hours only?
2011-02-18 9:48 ` Sébastien Vauban
@ 2011-02-18 10:51 ` Lawrence Mitchell
2011-02-18 22:40 ` Herbert Sitz
0 siblings, 1 reply; 9+ messages in thread
From: Lawrence Mitchell @ 2011-02-18 10:51 UTC (permalink / raw)
To: emacs-orgmode
Sébastien Vauban wrote:
> Hi Bastien and Luke,
> Bastien wrote:
>> Luke Crook <luke@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 <wence@gmx.li>
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: Does Effort support hours only?
2011-02-18 10:51 ` Lawrence Mitchell
@ 2011-02-18 22:40 ` Herbert Sitz
2011-02-21 9:47 ` Lawrence Mitchell
0 siblings, 1 reply; 9+ messages in thread
From: Herbert Sitz @ 2011-02-18 22:40 UTC (permalink / raw)
To: emacs-orgmode
Lawrence Mitchell <wence <at> gmx.li> writes:
> >>> Is it possible to specify estimated effort in something other than hours
> >>> (0.5, or 0:30)?
>
> > 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.
>
Lawrence --
I didn't test the patch, but it looks like it's hard coded to treat 24 hours as
1 day, 168 hours as 1 week, etc. This seems like it would create more confusion
than there was before.
In the context of measuring effort I think it's far more common to treat, e.g, 8
hours as the equivalent of a day's work. Most people have 5 day works weeks,
but some don't. Etc. In any case, giving user ability to set their own
conversion factors seems like a much-needed part of this.
-- Herb
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Does Effort support hours only?
2011-02-18 22:40 ` Herbert Sitz
@ 2011-02-21 9:47 ` Lawrence Mitchell
0 siblings, 0 replies; 9+ messages in thread
From: Lawrence Mitchell @ 2011-02-21 9:47 UTC (permalink / raw)
To: emacs-orgmode
Herbert Sitz wrote:
> Lawrence Mitchell <wence <at> gmx.li> writes:
>>>>> Is it possible to specify estimated effort in something other than hours
>>>>> (0.5, or 0:30)?
>>> 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.
> Lawrence --
> I didn't test the patch, but it looks like it's hard coded to
> treat 24 hours as 1 day, 168 hours as 1 week, etc. This seems
> like it would create more confusion than there was before.
> In the context of measuring effort I think it's far more common
> to treat, e.g, 8 hours as the equivalent of a day's work. Most
> people have 5 day works weeks, but some don't. Etc. In any
> case, giving user ability to set their own conversion factors
> seems like a much-needed part of this.
That is true. The hard-coded values were just as an example. It
would be reasonably trivial to introduce a variable that encoded
the number of hours a day's effort would contain. The patch was
just an example that the changes would not be too sweeping. In
fact, here's a patch on top that would allow user-customization:
diff --git a/lisp/org.el b/lisp/org.el
index 2027809..c3373fa 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -15473,27 +15473,41 @@ If no number is found, the return value is 0."
(string-to-number (match-string 1 s)))
(t 0)))
+(defcustom org-effort-durations
+ `(("h" . 60)
+ ("d" . ,(* 60 8))
+ ("w" . ,(* 60 8 5))
+ ("m" . ,(* 60 8 5 4))
+ ("y" . ,(* 60 8 5 40)))
+ "Conversion factor to minutes for an effort modifier.
+
+Each entry has the form (MODIFIER . MINUTES).
+
+In an effort string, a number followed by MODIFIER is multiplied
+by the specified number of MINUTES to obtain an effort in
+minutes.
+
+For example, if the value of this variable is ((\"hours\" . 60)), then an
+effort string \"2hours\" is equivalent to 120 minutes."
+ :group 'org-agenda
+ :type '(alist :key-type (string :tag "Modifier")
+ :value-type (number :tag "Minutes")))
+
(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)
+A bare number is interpreted as minutes, modifiers can be set by
+customizing `org-effort-durations' (which see).
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))
+ (let ((result 0)
+ (regex (rx (group (1+ (any "0-9")))
+ (0+ (syntax whitespace))
+ (group
+ (eval (cons 'or (mapcar 'car org-effort-durations)))))))
+ (while (string-match regex s)
+ (incf result (* (cdr (assoc (match-string 2 s) org-effort-durations))
(string-to-number (match-string 1 s))))
(setq s (replace-match "" nil t s)))
(incf result (org-hh:mm-string-to-minutes s))
--
Lawrence Mitchell <wence@gmx.li>
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?)
2011-02-17 19:47 Does Effort support hours only? Luke Crook
2011-02-18 9:02 ` Bastien
@ 2011-02-28 11:43 ` Lawrence Mitchell
2011-03-06 17:45 ` [Accepted] [O] " Bastien Guerry
2011-03-06 17:47 ` [PATCH] Support modifiers in effort durations Bastien
1 sibling, 2 replies; 9+ messages in thread
From: Lawrence Mitchell @ 2011-02-28 11:43 UTC (permalink / raw)
To: Luke Crook; +Cc: emacs-orgmode, Sébastien Vauban
Luke Crook wrote:
> Is it possible to specify estimated effort in something other
> than hours (0.5, or 0:30)?
> For example 1w, 1m, 2d etc?
Here's a cleaned up patch that allows user-specified modifiers
for effort strings. The new variable `org-effort-durations'
lists modifiers, and their mapping to minutes (words, as well as
single-letter modifiers, are supported). The default value is:
(("h" . 60)
("d" . 480) ; 8 hours
("w" . 2400) ; five days
("m" . 9600) ; 4 weeks
("y" . 96000)) ; 40 weeks
But you can change this.
Old effort strings (HH:MM) are still interpreted correctly. See
the docstrings of `org-effort-durations' and
`org-duration-string-to-minutes' for more details.
From a0e24b14755eb4087d9c47bb4eea11eb9151efcf Mon Sep 17 00:00:00 2001
From: Lawrence Mitchell <wence@gmx.li>
Date: Fri, 18 Feb 2011 11:01:46 +0000
Subject: [PATCH] Allow human-readable effort durations
To: emacs-orgmode@gnu.org
* lisp/org.el (org-effort-durations): New variable.
* lisp/org.el (org-duration-string-to-minutes): New function.
* lisp/org-agenda.el (org-agenda-filter-effort-form)
(org-format-agenda-item): Use it.
* lisp/org-clock.el (org-clock-notify-once-if-expired)
(org-clock-modify-effort-estimate, org-clock-get-clock-string): Use it.
Specifying large effort durations in hours and minutes is difficult.
Is 130:25 more than two weeks effort? More than three? This patch
allows specification of an effort duration as a friendly string. For
example 2w 5d is two weeks and five days of effort. Existing H:MM
entries will still be recognised correctly.
---
lisp/org-agenda.el | 4 ++--
lisp/org-clock.el | 8 ++++----
lisp/org.el | 41 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 47 insertions(+), 6 deletions(-)
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index dee23e0..87602dc 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -5334,7 +5334,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
@@ -6061,7 +6061,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 6b45ca5..cc11f3c 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -487,7 +487,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
@@ -561,10 +561,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)))))
@@ -581,7 +581,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 03f0b72..9cf1c94 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -15499,6 +15499,47 @@ If no number is found, the return value is 0."
(string-to-number (match-string 1 s)))
(t 0)))
+(defcustom org-effort-durations
+ `(("h" . 60)
+ ("d" . ,(* 60 8))
+ ("w" . ,(* 60 8 5))
+ ("m" . ,(* 60 8 5 4))
+ ("y" . ,(* 60 8 5 40)))
+ "Conversion factor to minutes for an effort modifier.
+
+Each entry has the form (MODIFIER . MINUTES).
+
+In an effort string, a number followed by MODIFIER is multiplied
+by the specified number of MINUTES to obtain an effort in
+minutes.
+
+For example, if the value of this variable is ((\"hours\" . 60)), then an
+effort string \"2hours\" is equivalent to 120 minutes."
+ :group 'org-agenda
+ :type '(alist :key-type (string :tag "Modifier")
+ :value-type (number :tag "Minutes")))
+
+(defun org-duration-string-to-minutes (s)
+ "Convert a duration string S to minutes.
+
+A bare number is interpreted as minutes, modifiers can be set by
+customizing `org-effort-durations' (which see).
+
+Entries containing a colon are interpreted as H:MM by
+`org-hh:mm-string-to-minutes'."
+ (let ((result 0)
+ (regex (rx-to-string (group (1+ (any "0-9")))
+ (0+ (syntax whitespace))
+ (group
+ (eval (cons 'or
+ (mapcar 'car org-effort-durations)))))))
+ (while (string-match regex s)
+ (incf result (* (cdr (assoc (match-string 2 s) org-effort-durations))
+ (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 ()
--
1.7.4.rc2.18.gb20e9
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Accepted] [O] Support modifiers in effort durations (was: Re: Does Effort support hours only?)
2011-02-28 11:43 ` [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?) Lawrence Mitchell
@ 2011-03-06 17:45 ` Bastien Guerry
2011-03-06 17:47 ` [PATCH] Support modifiers in effort durations Bastien
1 sibling, 0 replies; 9+ messages in thread
From: Bastien Guerry @ 2011-03-06 17:45 UTC (permalink / raw)
To: emacs-orgmode
Patch 638 (http://patchwork.newartisans.com/patch/638/) is now "Accepted".
Maintainer comment: none
This relates to the following submission:
http://mid.gmane.org/%3Cm3tyfo1j16.fsf%40e4300lm.epcc.ed.ac.uk%3E
Here is the original message containing the patch:
> Content-Type: text/plain; charset="utf-8"
> MIME-Version: 1.0
> Content-Transfer-Encoding: 7bit
> Subject: [O] Support modifiers in effort durations (was: Re: Does Effort
> support hours only?)
> Date: Mon, 28 Feb 2011 16:43:33 -0000
> From: Lawrence Mitchell <wence@gmx.li>
> X-Patchwork-Id: 638
> Message-Id: <m3tyfo1j16.fsf@e4300lm.epcc.ed.ac.uk>
> To: Luke Crook <luke@balooga.com>
> Cc: emacs-orgmode@gnu.org, =?utf-8?Q?S=C3=A9bastien?= Vauban
> <wxhgmqzgwmuf-geNee64TY+gS+FvcfC7Uqw@public.gmane.org>
>
> Luke Crook wrote:
> > Is it possible to specify estimated effort in something other
> > than hours (0.5, or 0:30)?
>
> > For example 1w, 1m, 2d etc?
>
> Here's a cleaned up patch that allows user-specified modifiers
> for effort strings. The new variable `org-effort-durations'
> lists modifiers, and their mapping to minutes (words, as well as
> single-letter modifiers, are supported). The default value is:
>
> (("h" . 60)
> ("d" . 480) ; 8 hours
> ("w" . 2400) ; five days
> ("m" . 9600) ; 4 weeks
> ("y" . 96000)) ; 40 weeks
>
> But you can change this.
>
> Old effort strings (HH:MM) are still interpreted correctly. See
> the docstrings of `org-effort-durations' and
> `org-duration-string-to-minutes' for more details.
>
> >From a0e24b14755eb4087d9c47bb4eea11eb9151efcf Mon Sep 17 00:00:00 2001
> From: Lawrence Mitchell <wence@gmx.li>
> Date: Fri, 18 Feb 2011 11:01:46 +0000
> Subject: [PATCH] Allow human-readable effort durations
> To: emacs-orgmode@gnu.org
>
> * lisp/org.el (org-effort-durations): New variable.
> * lisp/org.el (org-duration-string-to-minutes): New function.
> * lisp/org-agenda.el (org-agenda-filter-effort-form)
> (org-format-agenda-item): Use it.
> * lisp/org-clock.el (org-clock-notify-once-if-expired)
> (org-clock-modify-effort-estimate, org-clock-get-clock-string): Use it.
>
> Specifying large effort durations in hours and minutes is difficult.
> Is 130:25 more than two weeks effort? More than three? This patch
> allows specification of an effort duration as a friendly string. For
> example 2w 5d is two weeks and five days of effort. Existing H:MM
> entries will still be recognised correctly.
>
> ---
> lisp/org-agenda.el | 4 ++--
> lisp/org-clock.el | 8 ++++----
> lisp/org.el | 41 +++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 47 insertions(+), 6 deletions(-)
>
> diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
> index dee23e0..87602dc 100644
> --- a/lisp/org-agenda.el
> +++ b/lisp/org-agenda.el
> @@ -5334,7 +5334,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
> @@ -6061,7 +6061,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 6b45ca5..cc11f3c 100644
> --- a/lisp/org-clock.el
> +++ b/lisp/org-clock.el
> @@ -487,7 +487,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
> @@ -561,10 +561,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)))))
> @@ -581,7 +581,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 03f0b72..9cf1c94 100644
> --- a/lisp/org.el
> +++ b/lisp/org.el
> @@ -15499,6 +15499,47 @@ If no number is found, the return value is 0."
> (string-to-number (match-string 1 s)))
> (t 0)))
>
> +(defcustom org-effort-durations
> + `(("h" . 60)
> + ("d" . ,(* 60 8))
> + ("w" . ,(* 60 8 5))
> + ("m" . ,(* 60 8 5 4))
> + ("y" . ,(* 60 8 5 40)))
> + "Conversion factor to minutes for an effort modifier.
> +
> +Each entry has the form (MODIFIER . MINUTES).
> +
> +In an effort string, a number followed by MODIFIER is multiplied
> +by the specified number of MINUTES to obtain an effort in
> +minutes.
> +
> +For example, if the value of this variable is ((\"hours\" . 60)), then an
> +effort string \"2hours\" is equivalent to 120 minutes."
> + :group 'org-agenda
> + :type '(alist :key-type (string :tag "Modifier")
> + :value-type (number :tag "Minutes")))
> +
> +(defun org-duration-string-to-minutes (s)
> + "Convert a duration string S to minutes.
> +
> +A bare number is interpreted as minutes, modifiers can be set by
> +customizing `org-effort-durations' (which see).
> +
> +Entries containing a colon are interpreted as H:MM by
> +`org-hh:mm-string-to-minutes'."
> + (let ((result 0)
> + (regex (rx-to-string (group (1+ (any "0-9")))
> + (0+ (syntax whitespace))
> + (group
> + (eval (cons 'or
> + (mapcar 'car org-effort-durations)))))))
> + (while (string-match regex s)
> + (incf result (* (cdr (assoc (match-string 2 s) org-effort-durations))
> + (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 ()
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Support modifiers in effort durations
2011-02-28 11:43 ` [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?) Lawrence Mitchell
2011-03-06 17:45 ` [Accepted] [O] " Bastien Guerry
@ 2011-03-06 17:47 ` Bastien
1 sibling, 0 replies; 9+ messages in thread
From: Bastien @ 2011-03-06 17:47 UTC (permalink / raw)
To: Lawrence Mitchell; +Cc: emacs-orgmode, Sébastien Vauban, Luke Crook
Hi Lawrence,
Lawrence Mitchell <wence@gmx.li> writes:
> Here's a cleaned up patch that allows user-specified modifiers
> for effort strings. The new variable `org-effort-durations'
> lists modifiers, and their mapping to minutes (words, as well as
> single-letter modifiers, are supported).
Thanks a lot for this patch -- I've now applied it. I've just changed
the way the regular expression is computed, I find rx-to-string a bit
confusing (surely a matter of taste).
> The default value is:
>
> (("h" . 60)
> ("d" . 480) ; 8 hours
> ("w" . 2400) ; five days
> ("m" . 9600) ; 4 weeks
> ("y" . 96000)) ; 40 weeks
I agree this make sense.
Thanks again,
--
Bastien
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-03-06 17:48 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-17 19:47 Does Effort support hours only? Luke Crook
2011-02-18 9:02 ` Bastien
2011-02-18 9:48 ` Sébastien Vauban
2011-02-18 10:51 ` Lawrence Mitchell
2011-02-18 22:40 ` Herbert Sitz
2011-02-21 9:47 ` Lawrence Mitchell
2011-02-28 11:43 ` [PATCH] Support modifiers in effort durations (was: Re: Does Effort support hours only?) Lawrence Mitchell
2011-03-06 17:45 ` [Accepted] [O] " Bastien Guerry
2011-03-06 17:47 ` [PATCH] Support modifiers in effort durations Bastien
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).