I couldn't think of a better name, so this it.
Current version: 1.0.0
This tool operates on the idea of a chain of TODOs. That is, the user has a set of things to do today; anything that isn't done today should be carried over to the next day. It also operates on the idea of a workspace; that is, separate TODO lists organised by name. That name might be the project name, or it might be something like "work".
There are a number of tools for interacting with workspaces:
util37-todo
is the tool for adding TODOs for todayutil37-complete
is used to mark a task as completeutil37-today
is used to list today's unfinished TODOsutil37-review
is used to review completed TODOs for a given time range or durationutil37-annotate
is used to add notes to a TODO.util37-prioritise
is used to change the priority of a task.
It's still under development, and is missing a lot of documentation.
The inspiration from this came from a tweet that is now lost in the twitterstreams.
A TODO list is associated with a workspace. A workspace has a list of tasks; when entered, a task carries over each day until it is marked as completed.
A workspace should first be initialised:
util37-todo -i <workspace>
util-today
can also be used the same way to initialise the
workspace. Using the former allows tasks to be entered directly, e.g.
$ util37-todo -i new-project
TODO 2015-08-01 (0 tasks):
New task: Write the project specifications
TODO 2015-08-01 (1 tasks):
[ ] Write the project specifications (N) - 2015-08-01
New task: Write unit tests for the server module
TODO 2015-08-01 (2 tasks):
[ ] Write the project specifications (N) - 2015-08-01
[ ] Write unit tests for the server module (N) - 2015-08-01
New task:
Annotations can be entered using the util37-annotate
tool:
$ util37-annotate new-project
TODO 2015-08-01 (2 tasks):
0 [ ] Write the project specifications (N) - 2015-08-01
1 [ ] Write unit tests for the server module (N) - 2015-08-01
Task: 1
Enter annotations; each annotation should be separated by a newlines. Finish
the annotation with a pair of newlines.
Test coverage should be at least 80%.
Benchmarks should be included as well.
$
Normally, annotations aren't shown, but passing the -l
flag to many
of the tools will cause the annotations to be listed:
$ util37-today -l new-project
TODO 2015-08-01 (2 tasks):
[ ] Write unit tests for the server module (N) - 2015-08-01
+ Test coverage should be at least 80%.
+ Benchmarks should be included as well.
[ ] Write the project specifications (N) - 2015-08-01
$
Both util37-review
and util37-today
allow outputting the
tasks as markdown:
$ util37-today -l -m new-project
## TODO 2015-08-01 (2 tasks):
#### [ ] Write unit tests for the server module (N) - 2015-08-01
+ Test coverage should be at least 80%.
+ Benchmarks should be included as well.
#### [ ] Write the project specifications (N) - 2015-08-01
$
The util37-complete
tool is used to mark tasks as completed.
$ util37-complete new-project
TODO 2015-08-01 (2 tasks):
0 [ ] Write unit tests for the server module (N) - 2015-08-01
1 [ ] Write the project specifications (N) - 2015-08-01
Task: 1
Completed 'Write the project specifications'
Task:
$
When using util37-todo
, both finished and unfinished tasks
will be shown:
$ util37-todo new-project
TODO 2015-08-01 (2 tasks):
[X] Write the project specifications (N) - 2015-08-01, completed 2015-08-01
[ ] Write unit tests for the server module (N) - 2015-08-01
New task:
$
When running the tools for the first time on a given day, the previously-unfinished tasks will be rolled over into the current day:
$ util37-today new-project
TODO 2015-08-02 (1 tasks):
[ ] Write unit tests for the server module (N) - 2015-08-01
$
The util37-review
tool is used to generate task completion reports.
It can generate one of three reports:
- Duration from now, such as finished in the last week:
$ util37-review new-project finished week
Completed tasks finished in the last week
[X] Write the project specifications (N) - 2015-08-01, completed 2015-08-01
- Tasks completed since a given date:
$ util37-review new-project finished since 2015-08-01
Completed tasks finished since 2015-08-01
[X] Write the project specifications (N) - 2015-08-01, completed 2015-08-01
- Tasks completed within a given range:
$ util37-review new-project finished from 2015-07-31 to 2015-08-01
Completed tasks finished between 2015-07-31 and 2015-08-01
[X] Write the project specifications (N) - 2015-08-01, completed 2015-08-01
The general form is util37-review <workspace> <selector> <query>
.
The selector can be either "finished" to select tasks based on their completion date, or "started" to select tasks based on their creation date.
The workspaces are stored in ~/.config/util37/ and are serialised
using Go's encoding/gob
package.
Filters can be used in many places to limit the scope of the active tasks.
t:<tag> or tag:<tag> Only show tasks with the <tag>
i:<regex> Case insensitive regexp; shorthand for
'(?i:regex)'.
from:YYYY-MM-DD Only show tasks after the date given
to:YYYY-MM-DD Only show tasks before the date given
last:<dur> Only show tasks that have occurred in the
listed duration. This should be of the form
np, where 'n' is a number and p is a period
specified: 'h', 'd', 'w', or 'm' for hours,
days, week, and months, repectively.
pri:<priority> Only show tasks with at least the priority
given; priority may be one of
'L' for low
'N' for normal
'H' for high
'!' for urgent
r:<regexp> Explicitly pass in a regular expression; this
is useful for queries that might otherwise be
parsed as a tag.
Any non-tag words are used as a regular expression to select tasks by title.
Examples:
- t:todo '.*review$' '^Add' : this will select all tasks tagged 'todo', that start with the world 'Add' (case sensitive), and end with 'review'.