Todo.py
Todo.py is a script that manages a daily to-do list. The to-do list itself is just a plain text file, with some special notations. Todo.py automatically compares today's todo list with yesterday's to determine how much progress you have made. It has the following basic functionality:
- Any items which were on the list yesterday but not today are counted as complete, and as new in the opposite case.
- An item which you've added today but also completed in the same day can be marked with an exclamation point as the first character of the line.
- An item which you've abandoned, so want to delete but don't want it to be counted as something you've completed, can be marked with an at sign (@), and it will be removed.
- Any item which you'd like to be counted as completed today but to remain on the list to be done again in the future can be marked with an ampersand (&), as in you will do it today & tomorrow & the next day...
- Any item marked with a number sign (#) is a comment and not counted.
The top of the script describes the functionality, some command line functions, and the files created that you can use to keep track of your progress.
Installation
The todo.py script should be put in its own directory, where it can create folders and store archives of your todo lists. The variable TODODIR must be set appropriately. After that, just set a cron job to run "todo.py archive" each night sometime after midnight. The default to-do list is a text file called "TODO" in that same directory.
Example Usage
At its most basic, your to-do list is just a list of things to do, one per line. Write new lines when you add things, delete the lines when you've completed that task. Each night when todo.py runs, it'll tally up how many items you completed, how many new ones you added, and what the total number of items left to do is.
Throughout the day, you can run "todo.py progress" or "todo.py details" to get a running tally of how productive you're being.
A more complicated example to-do list might look like this:
# Personal # =============================== Pick up the dry cleaning Take out the trash # Work # =============================== Finish this month's TPS report Schedule a group meeting Check the break room coffee supplies Volunteer for the annual review committee
This person has divided their list into two categories using comment lines. Let's say this person takes out the trash (and so deletes that line), and also decides they need to get groceries today. A little later in the day the list will look like this:
# Personal # =============================== Pick up the dry cleaning !Get groceries # Work # =============================== Finish this month's TPS report Schedule a group meeting &Check the break room coffee supplies @Volunteer for the annual review committee
Not only did they decide to get groceries today, they've already done it, so it's marked with an exclamation mark. This month at work they have the responsibility of making sure there is enough coffee in the break room. They've done that today but must remember to do it again tomorrow, so instead of deleting the line it's marked with an &. They've also given up on the idea of volunteering for that extra committee.
Tomorrow, after "todo.py archive" is run in a cron job, the list will look like this:
# Personal # =============================== Pick up the dry cleaning # Work # =============================== Finish this month's TPS report Schedule a group meeting Check the break room coffee supplies