According to David Allen, whenever you define an action you need to assign three pieces of information that you will later use as criteria to decide what to do (in order of precedence): 1. Context: Where should I be (@home, @work, etc.) and/or which tools should I have at my disposal (@computer, @internet, etc.) to do this action? 2. Time needed: Which amount of time available must I have to do this action? 3. Energy needed: How wasted/fresh can I be to do this action? Then, when you're up for executing an action, you use "context", "time available", and "energy available" as a sieve to sift out what can be done. Only after you've looked at these three can you determine what is the priority for right now, the present moment. From the Getting Things Done perspective you don’t want to assign “priority” to action items on the front end because as soon as the situation changes and a couple of variables shift, as they are guaranteed to do, it will alter the array of possibilities. So lots of the action items you have rated at given priority levels are going to change. And when they do, then you’re busy re-prioritizing all those items. This is why David Allen, states that "The `ABC' priority codes don’t work." GTD suggests that priority makes a lot more sense to assess when you know the complete "context+time available+energy available" of the given moment. Orgmode helps you capture - the context: by means of tags, - the time needed: by means of an "effort" property, - the ABC priorities: by means of cookies. One notices: 1) Orgmode offers a default implementation for priorities although this fourth criteria should not formally be dealt with according to GTD. 2) The "energy" criteria is absent 3) The word "effort" is misnamed as it reminds more of an energy measure than a duration. Has anyone tried to customize orgmode so as to make it really GTD compliant?
Hi Rene,
Rene <jlr_0@yahoo.com> writes:
> According to David Allen, whenever you define an action you need to
> assign three pieces of information that you will later use as criteria
> to decide what to do (in order of precedence):
>
> 1. Context: Where should I be (@home, @work, etc.) and/or which tools
> should I have at my disposal (@computer, @internet, etc.) to do
> this action?
> 2. Time needed: Which amount of time available must I have to do
> this action?
> 3. Energy needed: How wasted/fresh can I be to do this action?
>
> Then, when you're up for executing an action, you use "context", "time
> available", and "energy available" as a sieve to sift out what can be
> done. Only after you've looked at these three can you determine what
> is the priority for right now, the present moment.
> ...
> Orgmode helps you capture
> - the context: by means of tags,
> - the time needed: by means of an "effort" property,
> - the ABC priorities: by means of cookies.
>...
> Has anyone tried to customize orgmode so as to make it really GTD
> compliant?
I am not really familiar with the official GTD methodology, and I don't
know exactly how you would normally represent the "energy needed"
associated with a task, but here's a suggestion.
It occurs to me that you could just use the A/B/C priority cookies to
represent energy levels, since you don't want to use them to encode
priorities. Something like:
#A: need to be fresh
#C: can be wasted
#B: everything else
or whatever would work for you. If that's granular enough to represent
your energy-needed levels, then it's a neat hack that requires zero
customization. Sorting and filtering by energy needed is then already
built into the agenda functions, etc. Just think "energy needed"
whenever Org says "priority" (which isn't very often), and you're good
to go.
--
Best,
Richard
Richard Lawrence <richard.lawrence <at> berkeley.edu> writes:
> I am not really familiar with the official GTD methodology, and I don't
> know exactly how you would normally represent the "energy needed"
> associated with a task, but here's a suggestion.
>
> It occurs to me that you could just use the A/B/C priority cookies to
> represent energy levels, since you don't want to use them to encode
> priorities. Something like:
> #A: need to be fresh
> #C: can be wasted
> #B: everything else
> or whatever would work for you. If that's granular enough to represent
> your energy-needed levels, then it's a neat hack that requires zero
> customization. Sorting and filtering by energy needed is then already
> built into the agenda functions, etc. Just think "energy needed"
> whenever Org says "priority" (which isn't very often), and you're good
> to go.
That's exactly what I've been doing so far. But that's not that convenient.
The energy level appears in front of the action headline. This adds noise
to the real action info.
I think I'll have to make the "Energy Level" an orgmode property that
appears in the :PROPERTIES: drawer of the action.
I'm not used to defining new properties in orgmode. I'll try to define an
"Energy" property as well as functions like "org-agenda-cmp-user-defined" in
order to correctly use "org-agenda-sorting-strategy", unless someone has
already done so...
--
Hi, On 2014-04-28 19:18, Rene <jlr_0@yahoo.com> writes: > I'm not used to defining new properties in orgmode. I'll try to define an > "Energy" property as well as functions like "org-agenda-cmp-user-defined" in > order to correctly use "org-agenda-sorting-strategy", unless someone has > already done so... I have not defined an Energy property, but I recently played with date properties (and a user defined sorting function). If it's helpful to you, the code is there: https://github.com/brabalan/org-review/blob/master/org-review.el#L156 Alan
[-- Attachment #1: Type: text/plain, Size: 2562 bytes --] Hi, Alan Schmitt <alan.schmitt@polytechnique.org> writes: > On 2014-04-28 19:18, Rene <jlr_0@yahoo.com> writes: > I have not defined an Energy property, but I recently played with date > properties (and a user defined sorting function). If it's helpful to > you, the code is there: > https://github.com/brabalan/org-review/blob/master/org-review.el#L156 I looked at the code and I don't get what means the part of the code getting the org-marker text property of a: --8<---------------cut here---------------start------------->8--- (get-text-property (point-min) 'org-marker a) --8<---------------cut here---------------end--------------->8--- In this part, the point-min returns the point-min of the current buffer (the agenda buffer in that case) while the function looks for the property into a. I tried launching this code into a custom agenda compare function and I get the error: --8<---------------cut here---------------start------------->8--- Args out of range: 1197, 1197 --8<---------------cut here---------------end--------------->8--- This makes sense since the agenda appears to be narrowed at that time so that (point-min) returns 1197 and the a string at this time is not 1197 characters long. Replacing (point-min) by 0 appears to work (I assumed the 0th character of the string has the wanted text property). My first guess of an energy cmp function is: --8<---------------cut here---------------start------------->8--- (defun org-energy-compare (a b) (let* ( (ma (or (get-text-property 0 'org-marker a) (get-text-property 0 'org-hd-marker a))) (mb (or (get-text-property 0 'org-marker b) (get-text-property 0 'org-hd-marker b))) (energy_a (org-entry-get ma "Energy")) (energy_b (org-entry-get mb "Energy")) ) (cond ((and (not energy_a) (not energy_b) ) nil ) ((and energy_a (not energy_b) ) 1 ) ((and (not energy_a) energy_b ) -1 ) ((> energy_a energy_b) 1 ) ((< energy_a energy_b) -1 ) (t nil ) ) ) ) --8<---------------cut here---------------end--------------->8--- Incidentally, I don't manage to have edebug triggered in a custom org agenda cmp function. I load the function with C-u C-M-x. the message "Edebug: org-energy-compare" appears as usual. When I launch the agenda I can see the function has been called since the entries are correctly sorted. But I was never given the input to debug it. Do you know why? -- Konubinix GPG Key : 7439106A Fingerprint: 5993 BE7A DA65 E2D9 06CE 5C36 75D2 3CED 7439 106A [-- Attachment #2: Type: application/pgp-signature, Size: 472 bytes --]
Hi Samuel, On 2014-04-29 12:30, Samuel Loury <konubinix@gmail.com> writes: > Hi, > Alan Schmitt <alan.schmitt@polytechnique.org> writes: > >> On 2014-04-28 19:18, Rene <jlr_0@yahoo.com> writes: >> I have not defined an Energy property, but I recently played with date >> properties (and a user defined sorting function). If it's helpful to >> you, the code is there: >> https://github.com/brabalan/org-review/blob/master/org-review.el#L156 > I looked at the code and I don't get what means the part of the code > getting the org-marker text property of a: > (get-text-property (point-min) 'org-marker a) > In this part, the point-min returns the point-min of the current buffer > (the agenda buffer in that case) while the function looks for the > property into a. > > I tried launching this code into a custom agenda compare function and I > get the error: > Args out of range: 1197, 1197 > This makes sense since the agenda appears to be narrowed at that time so > that (point-min) returns 1197 and the a string at this time is not 1197 > characters long. > > Replacing (point-min) by 0 appears to work (I assumed the 0th character > of the string has the wanted text property). I used to have `1' instead of `point-min', but I changed it following a suggestion from Bastien (http://thread.gmane.org/gmane.emacs.orgmode/85217/focus=85241). > Incidentally, I don't manage to have edebug triggered in a custom org > agenda cmp function. I load the function with C-u C-M-x. the message > "Edebug: org-energy-compare" appears as usual. When I launch the agenda > I can see the function has been called since the entries are correctly > sorted. But I was never given the input to debug it. Do you know why? I'm curious about this as well. I've had little luck in getting edebug to launch when I'm creating agenda views. Alan
[-- Attachment #1: Type: text/plain, Size: 2450 bytes --] Alan Schmitt <alan.schmitt@polytechnique.org> writes: > On 2014-04-29 12:30, Samuel Loury <konubinix@gmail.com> writes: >> Alan Schmitt <alan.schmitt@polytechnique.org> writes: >>> On 2014-04-28 19:18, Rene <jlr_0@yahoo.com> writes: >>> I have not defined an Energy property, but I recently played with date >>> properties (and a user defined sorting function). If it's helpful to >>> you, the code is there: >>> https://github.com/brabalan/org-review/blob/master/org-review.el#L156 >> I looked at the code and I don't get what means the part of the code >> getting the org-marker text property of a: >> (get-text-property (point-min) 'org-marker a) >> In this part, the point-min returns the point-min of the current buffer >> (the agenda buffer in that case) while the function looks for the >> property into a. >> >> I tried launching this code into a custom agenda compare function and I >> get the error: >> Args out of range: 1197, 1197 >> This makes sense since the agenda appears to be narrowed at that time so >> that (point-min) returns 1197 and the a string at this time is not 1197 >> characters long. >> >> Replacing (point-min) by 0 appears to work (I assumed the 0th character >> of the string has the wanted text property). > > I used to have `1' instead of `point-min', but I changed it following > a suggestion from Bastien > (http://thread.gmane.org/gmane.emacs.orgmode/85217/focus=85241). Thanks for the link. I am not a good lisp hacker, so I cannot be sure of this, but I suppose Bastien did not notice the last argument 'a'. Indeed, the function is defined as: --8<---------------cut here---------------start------------->8--- (get-text-property POSITION PROP &optional OBJECT) Return the value of POSITION's property PROP, in OBJECT. OBJECT should be a buffer or a string; if omitted or nil, it defaults to the current buffer. If POSITION is at the end of OBJECT, the value is nil. --8<---------------cut here---------------end--------------->8--- Then, the POSITION argument is the position in OBJECT to look for the property. Therefore, the use of a function related to the current buffer (like point-min) seems to strongly assume that OBJECT is the current buffer (or nil). In that case, OBJECT is not the current buffer but a string called 'a'. Thus, IIUC, it makes no sense to use OBJECT=a and POSITION=(point-min). -- Konubinix GPG Key : 7439106A Fingerprint: 5993 BE7A DA65 E2D9 06CE 5C36 75D2 3CED 7439 106A [-- Attachment #2: Type: application/pgp-signature, Size: 472 bytes --]
Hi Samuel,
Samuel Loury <konubinix@gmail.com> writes:
> In that case, OBJECT is not the current buffer but a string called
> 'a'. Thus, IIUC, it makes no sense to use OBJECT=a and
> POSITION=(point-min).
Indeed. It should be 0 in this case, thanks for spotting this,
--
Bastien
On 2014-04-29 15:31, Bastien <bzg@gnu.org> writes:
> Hi Samuel,
>
> Samuel Loury <konubinix@gmail.com> writes:
>
>> In that case, OBJECT is not the current buffer but a string called
>> 'a'. Thus, IIUC, it makes no sense to use OBJECT=a and
>> POSITION=(point-min).
>
> Indeed. It should be 0 in this case, thanks for spotting this,
Thanks a lot indeed. I'll fix this. I have no idea why it worked in my
case ...
Alan
Alan Schmitt <alan.schmitt@polytechnique.org> writes:
> Thanks a lot indeed. I'll fix this. I have no idea why it worked in my
> case ...
It half-worked: in this case (point-min) value was 1, taken from the
buffer, but you really want to set POSITION at 0 -- try point-max and
you'll see it raises an error.
--
Bastien