blog · git · desktop · images · contact & privacy · gopher


TODO-Liste mit gitodo verwalten

Steffen meinte neulich, dass er auf der Suche nach einem gescheiten Tool für's "Aufgabenmanagement" sei. Damit ist ein Programm gemeint, das eine TODO-Liste verwalten kann inklusive Komfortfunktionen wie Sortierung nach Prioritäten oder Deadlines. Nicht direkt ein Personal Information Manager, da bei diesem mehr Wert auf die Verwaltung von Kontakten oder festen Terminen gelegt wird, ein PIM ist eher sowas wie ein erweiterter Kalender -- die reine Verwaltung von Tasks ist dabei meistens nur ein Nebeneffekt. Und nicht selten sind PIMs eher fett oder teuer.

Hmm. Meine unmittelbare Reaktion war: Schreib's doch einfach in eine Textdatei. Ich hab das bisher zumindest so gemacht.

Dann hab ich mal kurz darüber nachgedacht. Eigentlich ist mein "Workflow" ziemlich mies. Häufig vergesse ich dann doch, in die Textdatei(en) wieder reinzuschauen, oder sie liegen auf einem anderen Rechner oder was auch immer. An die wirklich wichtigen Dinge erinnere ich mich zwar auch so, aber viele kleine Sachen, wo ich mir dachte, "das könntest du doch mal machen", bleiben einfach liegen. Keine so schöne Situation und da musste was dran geändert werden.

In meinem Kopf entstand dann das Anforderungsprofil: "Ich möchte einen großen Topf haben, in den ich kleine Zettelchen mit Aufgaben reinwerfen kann, und ein Werkzeug präsentiert mir diese Zettel automatisch so, dass ich die wichtigeren Aufgaben zuerst sehe."

Nun ist mein Nutzerverhalten grundlegend anders als seines, weshalb ich ihm nicht weiterhelfen konnte. Dafür aber mir. :ugly: Und so entstand gitodo:

Screenshot

gitodo ist ein einfaches Shellskript und die Tasks schreibt man mit $EDITOR. Ein Task sieht zum Beispiel so aus:

what: Kurzbeschreibung der Aufgabe.
when: 2010-12-10 08:30
prio: 2
warn: 4

Irgendwas anderes. Alle Zeilen ohne Keyword am Anfang spielen keine
Rolle und können beliebig als Kritzelbereich genutzt werden.

Das Format ist allerdings relativ frei. Die Reihenfolge der Felder oben spielt keine Rolle und das Datum wird mit date geparst, also kann da auch zum Beispiel "8pm" stehen. Priorität oder Deadline können auch ausgelassen werden, jenachdem, was der Task eben erfordert. Pro Task eine Datei. Das Skript ist dann primär dafür zuständig, diese Dateien auszuwerten und schön aufbereitet anzuzeigen. Wie man auf dem Screenshot oben sehen kann, erfolgt die Sortierung zuerst nach Priorität, dann nach eventueller Deadline. Tasks, deren Deadline vorbei ist oder die kurz davor stehen, werden markiert (! oder * am Zeilenanfang). Im Prinzip ist das erst einmal alles, was ich benötige.

Das "git" im Namen rührt daher, dass die Tasks alle in einem Git-Repository vorgehalten werden. Das Skript sorgt auch dafür, dass bei Änderungen an den Dateien diese automatisch committed werden. Somit kann ich schon einmal sicherstellen, dass ich am Laptop und am Desktop immer dieselbe TODO-Liste sehe.

Dann gibt es aber noch eine Anforderung meinerseits: Ich habe im Moment viel mit Windows zu tun. Da ich dort im Wesentlichen nur msysgit habe und auch keine großen Sachen wie Python oder Cygwin noch zusätzlich installieren will (zumindest vorerst), musste gitodo minimalistisch werden. msysgit bringt eine alte Bash 3 mit und ein paar GNU Tools wie sed oder grep. That's it.

Wenn ich mir schon ein Tool zur Aufgabenverwaltung schreibe, dann muss es auch unter diesen widrigen Umständen ;) laufen. Folglich ist ein Ziel von gitodo, dass es sowohl unter normalen GNU/Linux-Systemen läuft als auch unter msysgit.

Reminder-Funktionalität lässt sich mit einem Cronjob erreichen -- zumindest, sofern es einen Cron gibt. Es gibt jedenfalls eine besondere Ausgabemöglichkeit, die alle Tasks auflistet, deren Deadline nahe oder bereits abgelaufen ist. Das Paket awesome-vain hat auch ein neues Widget bekommen, um gitodo dort zu integrieren: Ich will dort primär die Zahl der offenen Tasks sehen und noch einmal erinnert werden, wenn es welche gibt, die ihre "kritische Phase" betreten. Überschneidet sich zwar mit dem Cronjob, aber derlei Erinnerungen kann man eigentlich nie genug haben.

Screenshot

Das Skript samt ausführlicherer Beschreibung liegt im Git-Repo. In den nächsten Tagen/Wochen wird es da sicherlich noch einige Änderungen geben. Da ich nicht primär unter msysgit wurschtele, kann es sein, dass einzelne Commits nur unter GNU funktionieren. Das wird dann nachträglich korrigiert, wenn ich es bemerke. Ganz pragmatisch. ;)