emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Lawrence Mitchell <wence@gmx.li>
To: emacs-orgmode@gnu.org
Subject: Re: Does Effort support hours only?
Date: Mon, 21 Feb 2011 09:47:54 +0000	[thread overview]
Message-ID: <m3aahppvlh.fsf@e4300lm.epcc.ed.ac.uk> (raw)
In-Reply-To: loom.20110218T233529-81@post.gmane.org

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>

  reply	other threads:[~2011-02-21  9:48 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3aahppvlh.fsf@e4300lm.epcc.ed.ac.uk \
    --to=wence@gmx.li \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).