Status-Detective-783 · 2022-04-05 03:34
I'm considering expanding my org-todo-keywords from the simple TODO and DONE paradigm, to include a little more category info either in the action phase or resolution phase. (Of course, there's a few more "standard" TODO keywords, but I mean beyond that as well.)
How do you incorporate your own extended TODO keywords into your workflow?
danderzei · 2022-04-05 04:20
My config is:
(setq org-todo-keywords '
((sequence "TODO(t)" "NEXT(n)" "WAITING(w@/!)" "PROJECT(p)"
"|"
"DONE(d/!)" "CANCELLED(c@/!)")))
- `TODO`: Something to do in the future
- `NEXT`: Next action to progress a project
- `WAITING`: Waiting for somebody else
- `PROJECT`: Grouping variable (for stuck projects definition)
I then use this for my diary:
((agenda "" ((org-agenda-span 2)
(org-agenda-start-on-weekday nil)
(org-agenda-sorting-strategy '(priority-up))))
(todo "NEXT")
(todo "WAITING")
(stuck ""))
("p" "Projects" todo "PROJECT")
org-stuck-projects '("/PROJECT" ("NEXT" "WAITING") ())
The others are obvious. Hope that helps.
ieure · 2022-04-05 05:25
A nice thing about these is that they can be defined *per-file*, therefore customized only to certain projects. So in my file tracking books I read, I have:
#+TODO: TOREAD READING(!) | READ(!)
Being able to specify them per-file is a major feature that lets you pick the right series for the task(s).
The defaults are mostly okay, though I like:
((sequence "TODO" "STARTED" "|" "DONE"))
Because, at least with programming type tasks, a lot of things take more than one day, so you need an intermediate state between TODO and DONE.
**IMO**, it shold be an invariant that TODO states encode a *one-way* passage through a process. Looping back to earlier states violates that, so that's a sign that you should be using tags or priorities instead. Tags and task priorities are there for good reason, and you should use them. Instead of a `DO-NEXT` state, leave it as `TODO` and take the `[#A]` high-priority task(s). Instead of having a `BLOCKED` todo state, use a `blocked` tag.
Example, if you start with TODO/STARTED/DONE, but then need to represent whether something is blocked (say, so you can ping whoever is blocking you), you *could* do that with states:
TODO->STARTED->BLOCKED->STARTED->DONE
But that loops back, so you put it into a STARTED state even though you already started it. I believe that this fails to accurately capture the progression of the task, because it was already started, and isn't being started again -- it's being *resumed*.
But if you have a `blocked` *tag*, you can filter to `blocked` tasks to see which ones you already began working on which need followup. It also lets you say, this is a `TODO`, but I'm also `blocked` on it -- perhaps because it depends on work someone else needs to complete before you can begin.
This doesn't have to be the only way to do it -- I'm sure there are lots of ways to make this work for you -- but this is what makes sense to me.
redblobgames · 2022-04-05 15:37
I decided it'd look nicer if all my keywords were four letters.
((sequence
"TODO(t)" ; doing later
"NEXT(n)" ; doing now or soon
"|"
"DONE(d)" ; done
)
(sequence
"WAIT(w)" ; waiting for some external change (event)
"HOLD(h)" ; waiting for some internal change (of mind)
"IDEA(i)" ; maybe someday
"|"
"NOTE(o@/!)" ; end state, just keep track of it
"STOP(s@/!)" ; stopped waiting, decided not to work on it
))
I think that's plenty of states for me. I also had other four letter ideas: THEM PROG OKAY DONT FAIL TEMP HACK but didn't use them.
I also assigned colors to these. TODO is red, NEXT is bright red, WAIT is orange, HOLD is yellow, DONE is green, STOP is cyan, NOTE is blue, IDEA is purple.
In practice, I don't use NOTE. I use IDEA but all my ideas are in one file, so I don't need to define it globally. I do use the other states. I especially like distinguishing WAIT (waiting for someone else) from HOLD (waiting for me). And I very much like NEXT reminding me what's at the *top* of my TODO list. CURR would've been another name for that state.
weevyl · 2022-04-05 23:43
Three states for me are enough:
* TODO for the stuff I still have to do
* PROG for stuff I am currently working on
* DONE for things that are done
I've toyed with using more states (such as BLOCKED for things that are waiting for inputs from others, REVIEW for things that are in review, and WAIT for things I do not want start yet) but in the end they just added noise without helping me much. So now it's only the 3 states.
Curiously, making them all the same length was important to keep things looking nice.