yaGTD - Yet Another Getting Things Done

A primitive Getting Things Done to-do list manager.

Author

MiKael NAVARRO <klnavarro@gmail.com>.

Contents

yaGTD - Yet Another Getting Things Done

yaGTD project is a very simple utility designed to make the management of your to-do list quick and easy.

I have several long-term projects at work, and I need reminders to spend time on the important things that aren't too urgent. When, in 2006, I read David Allen's personal-productivity book Getting Things Done, I tried to apply this method on my personal projects; So, I needed a 'trusted system' ...

But why another to-do list? There are hundreds of to-do lists on the web, some commercial, some free, some need on-line connection while other not, some are integrated into an email client and some web sites were built to manage your to-do list, but I was looking for something a little different.

What I wanted was something lightweight and flexible, a simple way to carry and maintain my tasks around on a USB stick. The program needed to be capable of running on different platforms and must not depend on any data format or any web connection.

I tried several software for managing to-do lists, including the excellent iKog and pyGTD 1 programs, but I found that the former was missing the notion of urgency and importance (preached by Stephen Covey into Seven Habits of Highly Effective People), and the latter made it too laborious to maintain data.

1

pyGTD is now part of VimGTD (original ^^).

And so, after several months of occasional experimentation, I decided to write my own tool that includes the easy to use but powerful commmand line interface from iKog and the management of Covey concepts from pyGTD.

To summarize, if you are looking for fancy menus and windows, go away; But, if you are comfortable at the command line a simple plain text is an age-old but perfect method for tracking your stuff, and yaGTD can help you to manage efficiently this file.

Licence

yaGTD is a free software available under the terms of the GNU General Public Licence. Refer to the file COPYING (which should be included in this distribution) for the specific terms of this licence.

Requirements

Python 2.3 or later must be installed on your system.

Theorically should work on all platforms.

See INSTALL file for more details on how to deploy yaGTD.

Getting started

Simply run:

$ python /path_to_the_file/yagtd.py

Use --help flag for more options; Available commands, with a short description, are accessible interactively with the help or the ? command; A summary of important commands and options is available with the usage command.

yagtd.png

To add a task, simply type add followed by the task you want to add:

GTD> add Etudier GTD.

Then, to see all tasks in your todo list, enter list command.

Adding tasks

Add another task:

GTD> add Etudier le Mind-mapping.

Specifying a context

Contexts are specified with the @ character:

GTD> add Etudier le Mind-mapping. @home

GTD> add Ameliorer Rhinote (et contacter l'auteur). @computer @home

Contexts can be made part of the task description:

GTD> add Dire à @Roger l'aller directement chez Zézette.

Specifying projects

Projects are added with the p: keyword:

GTD> add Etudier GTD. p:GTD

Projects can also be added with the + prefix:

GTD> add Etudier GTD. +GTD

Projects can be made part of the task description:

GTD> add Étudier +GTD.

Specifying status

Status is added with the ! character:

GTD> add Etudier GTD. !Next

GTD> add Manger dès que la pizza arrive. !waitingfor

GTD> add Comprendre la mécanique quantique. !someday

The commands next and defer set the status of a task to !next:

GTD> next 3

GTD> defer 3

When the !next status is set to a task, that status is removed from the other !next tasks in the same project(s).

The maybe and someday commands set the status of a task to !someday:

GTD> maybe 3

GTD> someday 3

The waitingfor command sets the status of a task to !waitingfor:

GTD> waitingfor 3

Adding references

Archive a task to a reference memo with the ref: keyword:

GTD> add pyGTD, DevTodo, todotxt. ref:GTD

Setting a date

You can, optionaly, add a task with a target (due) date with the D:yyyy-mm-dd notation:

GTD> add Etudier GTD. @home p:GTD D:2006-12-16

Due dates can also be specified by the first two letters of the coming day of the week:

GTD> add Faire les courses D:sa

With the days of the week:

mo

monday

tu

tuesday

we

wednesday

th

thursday

fr

friday

sa

saturday

su

sunday

You can set the time required for a task by adding T:n[WDHM] keyword.

W

n weeks

D

n days

H

n hours

M

n minutes

The commands start, end, due and duein allow to change the dates on existing tasks.

Others options

We find here additional options from Stephen Covey:

  • U: urgency (5=today,4=this_week,3=this_month,2=this_quarter,1=this_year)

  • I: importance (5=crucial,4=high,3=normal,2=low,1=someday)

  • C: percent complete

  • T: time requiered T:n[WDHM]

  • R: recurrence R:n[MWDH]

  • S: start/creation date

  • D: due (target) date

  • E: end, closure date

If a due date is specified, it will be used for computing the urgency; the urgency option, if given, will then be ignored.

Changing the tasks

Replacing a task

To replace the entire task #id by a new one:

GTD> replace id new task

Ex:

GTD> replace 1 Etudier la methodology GTD. @home p:GTD

Editing a task

Interactively edit the task #id:

GTD> edit id

Then, validate modifications by pressing <return>:

GTD edit> editted task

Ex:

GTD> edit 1

GTD edit> Etudier la methode GTD. @home p:GTD

Modifying a task

Add / change elements of task #id but leave each other unchanged:

GTD> modify id elements to change

Ex:

GTD> modify 3 @online

And, to modify elements of a set of tasks:

GTD> modifyall regexp elements to change

Ex:

GTD> modifyall p:GTD U:4 I:2

Appending a task

Add new elements to task #id but leave existing elements unchanged:

GTD> append id new elements

Ex:

GTD> append 2 @computer

And, to add new elements to several tasks:

GTD> appendall regexp new elements

Ex:

GTD> appendall p:GTD ref:documentation

Extending a task

Add more text (description) to task #id:

GTD> extend id additional notes

Be careful: for the moment, extend the task title (only)!

Removing a task

Remove the given task #id:

GTD> del id

Close the given task #id:

GTD> close id

Closing a task removes its !next or !waitingfor status.

Remark: If the task has a recurrent time-delta, the task is automatically reprogrammed. If the tastk does not have a recurrent time-delta and has the status !next, this status is cleared.

Saving your work

Save to todo.txt filename:

GTD> save [path/to/todo.txt]

Load from a todo.txt filename:

GTD> load path/to/todo.txt

Export into printable format (ReST):

GTD> print [path/to/todo.rest]

Move done items from todo.txt to done.txt:

GTD> archive

GTD Prompt

The default prompt is GTD> ``. If there are tasks in the inbox (i.e., without context), the prompt contains a ``@ symbol. If there are overdue tasks, it contains a ! symbol.

Config file

You can put configurations in the file $HOME/.yagtdrc in INI file format.

Default values for command-line options can be set in the "[options]" section:

colorize

enable colors if the value is "true"; default is no colors

quiet

skip the welcome banner if the value si "true" ; default is not quiet

todo_txt

the path to the "todo.txt" file, default is "./todo.txt"

done_txt

the path to the "done.txt" file, default is "./done.txt"

Hooks can be defined in the "[hooks]" section to run shell commands before and after the save and archive commands. The hooks are "pre-load", "post-load", "pre-save", "post-save", "pre-archive" and "post-archive".

A color scheme can be defined in the "[colors]" section. Available colors are black, red, green, yellow, blue, magenta, cyan, grey, dark_grey, light_red, light_green, light_yellow, light_blue, light_magenta, light_cyan, white. Bold colors are defined with the “bold” suffix e.g., “red bold”.

Example:

[options]
colorize = true
quiet = true
todo_txt = mytodo.txt
done_txt = mydone.txt

[hooks]
pre-load = echo "executing pre-load hook"
post-load = echo "executing post-load hook"
pre-save = echo "executing pre-save hook"
post-save = echo "executing post-save hook"
pre-archive = echo "executing pre-archive hook"
post-archive = echo "executing post-archive hook"

[colors]
# Solarized light
id = light_cyan
default = light_yellow
context = light_magenta
project = green
status = light_red
reference = cyan
urgency = magenta
importance = magenta
complete = yellow
time = blue
recurrence = blue
start = light_green
due = red
end = green

-- MiKael NAVARRO