Er bestaan heel wat programma’s om je taken en to-do-lijstjes af te handelen, maar het merendeel hiervan werkt grafisch of is zelfs webgebaseerd. Dat past natuurlijk niet in de Unix-filosofie. Leef je als het ware op de commandline, dan is Taskwarrior een uitstekende keuze om je taken te beheren.

Als je taken en to-do-lijstjes wilt bijhouden, heb je keuze genoeg aan programma’s onder Linux. Tasque, GeeTeeDee, Getting Things GNOME, KOrganizer, Task Coach, ThinkingRock en Wunderlist zijn maar enkele voorbeelden. En uiteraard kun je ook je toevlucht zoeken tot webgebaseerde tools zoals Remember the Milk, Google Tasks, Producteev en Toodledo. Maar wat nou als je liever op de commandline werkt? Dan zijn de opties een stuk minder talrijk. Eén tool die er met kop en schouders bovenuit steekt, is Taskwarrior.

Taskwarrior is al enkele jaren oud en is in de meeste Linux-distributies in de officiële repository te vinden (zie kader ‘Taskwarrior installeren’). Na installatie is Taskwarrior beschikbaar als het commando ‘task’. De eerste keer dat je het programma uitvoert (bijvoorbeeld met ‘task version’ om het versienummer te controleren), vraagt Taskwarrior om een configuratiebestand ~/.taskrc en een gegevens directory ~/.task aan te maken. In de gegevens directory worden alle taken opgeslagen, maar daar heb je normaal niet mee te maken. Op de inhoud van het configuratiebestand gaan we later in.

Taskwarrior installeren
De meeste recente Linux-distributies bevatten Taskwarrior in de officiële repository onder de naam ‘task’. Dit is het geval voor Ubuntu, Fedora, Arch Linux, Gentoo en Slackware. In openSUSE zit het onder de naam ‘taskwarrior’ en ook in FreeBSD zit het in de ports als deskutils/taskwarrior. Dit is echter niet altijd de recentste versie. Wil je de nieuwste functies, download dan de broncode van de nieuwste versie van de website en compileer het programma. Volg daarvoor de instructies op de downloadpagina. Onder Ubuntu kun je ook een PPA installeren die een recentere versie van Taskwarrior bevat. Zie ook daarvoor de downloadpagina op de website van het project.

De werking van het programma is op het eerste gezicht wat overweldigend, omdat je alles uitvoert door subcommando’s van de opdracht task uit te voeren. Enkele 

voorbeelden om te starten:


Afbeelding 1

Je ziet in bovenstaande opdrachten al de belangrijkste zaken die je dagelijks met Taskwarrior zult doen. Met ‘task add’ en een beschrijving voeg je een taak toe, waar je optioneel een prioriteit aan toekent. Met ‘task next’ krijg je te zien wat de zeven volgende taken zijn die je moet uitvoeren, waarbij Taskwarrior de lijst ordent op urgentie. De prioriteit die we zelf ingesteld hebben, heeft een invloed op die urgentie. Maar, ook andere factoren hebben hier invloed op. Dit zien we verderop in dit artikel terug. Elke taak heeft een ID, dat getoond wordt bij het creëren van de taak en ook in de lijst van ‘task next’. Dat ID kunnen we gebruiken om aan te geven dat de taak uitgevoerd is, met de opdracht ‘task ID done’. De taak verdwijnt dan uit de lijst met de volgende taken die je moet uitvoeren.

Let wel op met de beschrijving van een taak. Aangezien je alle Taskwarrior-opdrachten in je shell (zoals bash) intypt, worden speciale tekens door je shell geïnterpreteerd. Als je beschrijving bijvoorbeeld een ( ‘ ) bevat, moet je de hele beschrijving door twee ( ” )-tekens laten omvatten. Dit werkt dus niet:

$ task add Cd’s schrijven

Maar dit werkt wel:

$ task add “Cd’s schrijven”

Een andere oplossing is om een backslash te gebruiken vóór het speciale teken:

$ task add Cd\’s schrijven

Ook ( & – ! – ? ) en nog vele andere tekens worden door de shell speciaal geïnterpreteerd. Alle tekens vereisen daarom één van bovenstaande oplossingen.

Help!
De werking van Taskwarrior is misschien overweldigend, maar de documentatie is dat ook en dan bedoel ik in goede zin. Met ‘man task’, ‘man taskrc’, ‘man task-tutorial’, ‘man task-color’, ‘man task-sync’ en ‘man task-faq’ lees je de man-pagina’s van respectievelijk Taskwarrior, het configuratiebestand, een tutorial, het gebruik van kleuren in de uitvoer van Taskwarrior, de synchronisatie van Taskwarrior-taken over meerdere computers en een lijst van ‘frequently asked questions’. Probeer eerst eens wat met Taskwarrior te werken voor je de man-pagina’s leest, want anders is het wat veel informatie om te behappen. Maar als je de basis van Taskwarrior gewend bent, vormen de man-pagina’s een uitstekende documentatie van alle mogelijkheden. En wanneer je een keertje niet meer weet hoe de syntax van de subcommando’s ook alweer was, helpt de opdracht ‘task help’ je waarschijnlijk terug op weg met zijn beknopte overzicht.

Tijdsregistratie
De taken die je aanmaakt, kun je ook gebruiken voor een tijdsregistratie zodat je kan bijhouden hoeveel tijd je aan al je taken besteedt. De werking daarvan is heel eenvoudig: je start het tellen van de tijd met ‘task ID start’ en je stopt het tellen met ‘task ID stop’. Elke keer dat je aan de taak werkt, start je de taak en elke keer je iets anders doet, stop je er weer mee. De geregistreerde tijden worden zo automatisch bij elkaar opgeteld. Een gestarte taak heet ‘active’. Alle huidige actieve taken (maar normaal start je er maar één tegelijk) vraag je op met ‘task active’.

Standaard wordt bij het starten en stoppen van een taak een annotatie aan de beschrijving toegevoegd: ‘Started task’ respectievelijk ‘Stopped task’. Wil je een andere annotatie toevoegen, dan kan dat eenvoudig door die achter de opdracht in te geven, zoals in ‘task ID start Interview uittypen’ of ‘task ID stop Pauze’.

Als je ‘task ID info’ uitvoert, krijg je onderaan de totale tijdsduur te zien die je aan de taak besteed hebt. Je krijgt ook de datum en het tijdstip te zien bij elke start- of stop-actie, samen met de bijbehorende annotatie.

Attributen
Elke taak kan ook een aantal attributen hebben. Die attributen registreren extra informatie, die je kunt gebruiken om taken te filteren of te groeperen. We zagen in het begin al hoe je de prioriteit van een taak bij het creëren van de taak instelt. Attributen kun je echter ook achteraf aan een bestaande taak toevoegen met het subcommando modify. Voeg een taak bijvoorbeeld aan een project toe op de volgende manier:

$ task ID modify project:Verbouwing

Bevat de projectnaam spaties, dan moet je de hele projectnaam tussen enkele aanhalingstekens met een backslash ervoor zetten, anders interpreteert de shell dit verkeerd:

$ task ID modify project:\’Verbouwing zolder\’

Ook ‘tags’ zijn ondersteund, voor taken die niet aan een vast omlijnd project toebehoren, maar toch tot een duidelijk type behoren. Bijvoorbeeld:

$ task ID modify +klussen +tuin

Met de speciale tag: +next

Je kunt ook een deadline aan een taak toekennen:

$ task ID modify due:31st

Taskwarrior interpreteert die deadline vrij slim: het programma weet dat je met ’31st’ de 31ste van deze maand bedoelt. Een volledige datum opgeven kan natuurlijk ook. Taken waarvan de deadline verstreken is, worden in een andere kleur getoond in de uitvoer van Taskwarrior.

Een taak met een deadline kun je ook ‘recurrent’ maken, zodat deze taak periodiek terugkomt. Dat is handig voor maandelijkse taken, zoals het betalen van de huur en de facturen voor nutsvoorzieningen. Zo’n taak maak je eenvoudig aan met het attribuut recur:

$ task add Betaal de huur due:1st recur:monthly

Optioneel voeg je daar de laatste datum aan toe waarop de taak uitgevoerd moet worden, met het attribuut until.

Een recurrente taak is speciaal: maak je die aan, dan krijgt die de status recurring en wordt die taak niet getoond door Taskwarrior (tenzij in de uitvoer van het rapport task all), omdat het een soort sjabloon is. Onmiddellijk na het aanmaken, wordt er echter een nieuwe taak aangemaakt met de status pending en dezelfde beschrijving, recurrentie, project, prioriteit en tags. Het is die taak die je in de lijst te zien krijgt, overigens standaard in een andere kleur dan de normale taken. In de uitvoer ‘task ID info’ krijg je het UUID (een unieke code) van de ‘parent task’ te zien, het sjabloon. Taskwarrior maakt automatisch elke maand een nieuwe taak aan op basis van het sjabloon met de volgende deadline.

Een lijst met alle ondersteunde attributen en de syntax vraag je op met ‘task columns’.

Rapporten
Taskwarrior kent heel wat types rapporten waarmee je informatie kunt opvragen. Met ‘task reports’ krijg je alle gedefinieerde rapporten te zien. Er zijn twee types rapporten: statische en aanpasbare. De statische zijn allemaal speciale rapporten, vaak met een speciale uitvoer. Zo heb je ‘task calendar’ dat een kalender van de volgende maanden toont met kleurcodes voor dagen dat je deadlines voor taken hebt. En met ‘task ID information’ krijg je allerlei informatie over de taak ID te zien.

Met ‘task summary’ krijg je jouw verschillende projecten te zien en hoever deze gevorderd zijn. En met ‘task burndown.monthly’ krijg je in een staafgrafiek te zien hoeveel taken je maandelijks maakt en hoeveel er ‘pending’ blijven. Altijd handig om te zien hoe je achterstand steeds oploopt… Er zijn ook wekelijkse en dagelijkse varianten van dit rapport.


Taskwarrior ondersteunt heel wat tekstuele grafiekjes.

Verder zijn er ook heel wat aanpasbare rapporten ingebouwd. Deze geven hun uitvoer allemaal in een standaardformaat, namelijk een tabel. Met ‘task active’ krijg je de actieve taken te zien (normaal slechts één tegelijk), met ‘task completed’ vraag je de taken op die uitgevoerd zijn, en met ‘task list’, ‘task ls’ en ‘task minimal’ krijg je de ‘pending’ taken te zien, waarbij elk type rapport meer of minder kolommen toont.

Elk van deze rapporten wordt gedefinieerd door vijf eigenschappen: een beschrijving, kolommen, labels, hoe de taken gesorteerd worden en een filter. De configuratie van een rapport kun je opvragen met de opdracht ‘task show RAPPORT’, waarbij RAPPORT de naam van het rapport is.

Door het gebruik van een standaardformaat is het ook eenvoudig om de uitvoer van deze rapporten aan te passen. Dat gebeurt in het configuratiebestand met code die je in de uitvoer van de opdracht ‘task show RAPPORT’ te zien krijgt, waarbij je dan de filter of de getoonde kolommen in de tabel aanpast. Je kunt ook een volledig nieuw type rapport aanmaken door de vijf eigenschappen van een rapport in te geven in het configuratiebestand.


De configuratie van heel wat rapporten van Taskwarrior is volledig aan te passen.

What’s in a name?
In alle Taskwarrior-opdrachten gebruik je het ID van de taken. Om efficiëntieredenen is zo’n ID echter niet vast. Ze veranderen wel eens, maar gelukkig is dat volledig voorspelbaar. Je zult het misschien al gemerkt hebben. Stel dat je een taak als uitgevoerd registreert met ‘task ID done’ of uit de database hebt verwijderd met ‘task ID delete’, dan blijven de ID’s van de andere taken hetzelfde, totdat je een Taskwarrior-opdracht uitvoert dat taken toont, zoals task next of task list. Dan worden de ID’s doorgeschoven.

Dat is handig omdat je vaak enkele task-opdrachten na elkaar hebt uitgevoerd en met de pijltjestoetsen in de buffer van je shell teruggaat om bijvoorbeeld dezelfde start- en stop-subcommando’s van Taskwarrior uit te voeren. Als Taskwarrior de ID’s onmiddellijk na het verwijderen van een taak zou veranderden, zou je die subcommando’s op de verkeerde taken uitvoeren. Nu moet je er enkel op letten dat je na het tonen van taken even opnieuw kijkt wat het ID is van de taken waarmee je bezig bent.

Heb je in scripts toch een ID nodig dat gegarandeerd hetzelfde blijft, gebruik dan het UUID (Universally Unique Identifier). Dit is een attribuut dat voor elke taak aangemaakt wordt en een willekeurig 128-bits getal is dat in de vorm van 32 hexadecimale cijfers en vier streepjes getoond wordt. Het UUID van een taak vraag je op met task ID uuid. Alle Taskwarrior-opdrachten die je op een ID kunt uitvoeren, ondersteunen ook een UUID.

Filters
Een van de krachtige functies van Taskwarrior vormen de filters, waarmee je de uitvoer van andere subcommando’s beperkt tot een bepaalde deelverzameling van taken. Zo krijg je met ‘task count’ het totaal aantal taken te zien. Met ‘task status:pending count’ beperkt het teruggegeven aantal zich tot het aantal taken dat nog niet voltooid is en met ‘task project:Klussen count’ krijg je het aantal taken terug dat tot het project Klussen behoort.  Als filter kun je elk attribuut gebruiken.

Je kunt taken ook filteren op de aan- of afwezigheid van bepaalde tags. Bijvoorbeeld task +werk list of task -werk list.

Je kunt ook een willekeurig woord als filter opgeven, waarna Taskwarrior alle taken teruggeeft waarvan het woord in de beschrijving voorkomt:

$ task tuin list

Sinds Taskwarrior 2.4.0 (tijdens de redactiesluiting nog niet uitgebracht) wordt het woord als reguliere expressie geïnterpreteerd. In eerdere versies bereikte je dat door in het configuratiebestand ‘regex=on’ te plaatsen.

Meerdere filters zijn ook te combineren. Voeg ze eenvoudigweg aan elkaar toe, zoals in task status:pending project:Klussen +tuin list, dan geeft dit alle taken terug die aan alle opgegeven filters voldoen. Dit is een verkorte vorm van task status:pending and project:Klussen and +tuin list. Uiteraard ondersteunt Taskwarrior ook de ‘or’-operator die alle taken teruggeeft die aan minstens een van de opgegeven filters voldoet, zoals in task project:Klussen or -werk list.

Taken synchroniseren
Draai je Taskwarrior op twee computers, dan kun je jouw takendatabases eenvoudig synchroniseren. Dat verloopt met de opdracht task merge URL. Voor die URL gebruik je de ssh-notatie, in de vorm ssh://gebruiker@computer:.task/. Na die opdracht verbindt Taskwarrior via ssh met de tweede computer, haalt de takenlijst op, smelt deze samen met je lokale takenlijst en vraagt dan om de lokale wijzigingen ook naar de externe computer terug te sturen. Daarna hebben beide computers een identieke takenlijst. Je kunt in de configuratie overigens een standaard URL ingeven, zodat je die niet telkens het mergesubcommando moet ingeven. Dat gaat met de optie merge.default.uri.

De ingebouwde synchronisatie met het mergesubcommando werkt ook voor meer dan twee computers, maar eigenlijk is het dan handiger dat je een centrale server draait. Sinds kort hebben de ontwikkelaars van Taskwarrior daarom versie 1.0 uitgebracht van Taskserver, de officiële servercomponent. Deze installeer je op je eigen Linux-server, waarna je op al je machines je taken synchroniseert met die server, zodat je overal de beschikking hebt over dezelfde taken. Het synchroniseren gebeurt volledig versleuteld. Taskwarrior blijft gewoon werken als je geen verbinding met Taskserver kunt opmaken, bijvoorbeeld als je netwerkproblemen hebt. Komt het netwerk terug, dan synchroniseer je eenvoudigweg je taken.

Extra tools
Taskwarrior is opgebouwd als een blokkendoos: flexibel en uitbreidbaar. Het zal je dan ook niet verbazen dat er heel wat externe tools ontwikkeld zijn die Taskwarrior uitbreiden voor specifieke situaties of ermee kunnen integreren. Op de website van Taskwarrior staat een hele lijst met tools die je eens kunt uitproberen. Allereerst zijn er een aantal alternatieve front-ends voor wie niet van de commandline-interface houdt. Zo is er een ncurses shell, een webgebaseerde front-end en zelfs een Android-app (Mirakel) die je kunt laten synchroniseren met de taskserver.

Er bestaan ook heel wat tools die Taskwarrior integreren met andere software. Zo importeert bugwarrior issues uit GitHub, Trac en Bugzilla in Taskwarrrior. Er zijn tools die de takenlijst exporteren naar html voor publicatie op je website. En er zijn tools waarmee je in Mutt of Thunderbird e-mails als uit te voeren taken markeert in Taskwarrior. Er bestaat zelfs een tool die je via e-mail of desktop-notificaties herinnert aan de taken die je moet uitvoeren. Bekijk de lijst met tools eens op de website van Taskwarrior en wellicht zit er iets tussen dat in jouw situatie handig is. Let wel op: niet alle tools werken met elke versie van Taskwarrior samen.

Configuratie
Taskwarrior slaat zijn instellingen op in het configuratiebestand ~/.taskrc. Die instellingen kun je daarin aanpassen, maar dat hoeft niet perse. Met het subcommando task config gaat het namelijk veel sneller. Wil je bijvoorbeeld de week op maandag laten beginnen in plaats van de standaardwaarde zondag, dan type je de opdracht task config weekstart Monday in. Bevestig met ‘yes’. Met task show krijg je alle mogelijke variabelen te zien waarvan je de waarde kunt aanpassen.

Het configuratiebestand van Taskwarrior is de sleutel tot heel wat mogelijkheden

En verder
Taskwarrior is nog veel krachtiger dan we hier hebben kunnen aantonen. Zo kun je de manier waarop de urgentie van taken berekend wordt zelf aanpassen. Je kunt ook extra attributen definiëren. Eigenlijk kun je bijna alles naar je hand te zetten. De commandline aanpak van Taskwarrior maakt het ook een toepassing die je eenvoudig met andere commandline-programma’s kunt combineren, bijvoorbeeld in shellscripts. Probeer Taskwarrior maar eens een tijdje uit en je zult vlug versteld staan van de kracht.

Links
Taskwarrior: http://taskwarrior.org

Taskwarrior tools: http://taskwarrior.org/tools/

Taskserver: http://taskwarrior.org/docs/server_setup.html