Taskwarrior has a Document Object Model, or DOM, which defines a way to reference all the data managed by taskwarrior. You may be familiar with the DOM implemented by web browsers that let you access details on a page programmatically. For example:
document.getElementById("myAnchor").href
Taskwarrior allows the same kind of data access in a similar form, for example:
1.description
This references the description text of task 1. There is a
_get
helper command
that queries data using a DOM reference. Let's see it in action,
by first creating a detailed task.
$ task add Buy milk due:tomorrow +store project:Home pri:H $ task 1 info Name Value ------------- ------------------------------------------ ID 1 Description Buy milk Status Pending Project Home Priority H Entered 2014-09-28 21:53:59 (4 seconds) Due 2014-09-29 00:00:00 Last modified 2014-09-28 21:53:59 (4 seconds) Tags store UUID c0ab2bf6-b4f5-45c2-8420-18ab4f1ba7e7 Urgency 16.56 project 1 * 1 = 1 priority 1 * 6 = 6 tags 0.8 * 1 = 0.8 due 0.73 * 12 = 8.76
All the attributes of that task are available via DOM references. Here are some examples:
$ task _get 1.description Buy milk $ task _get 1.uuid c0ab2bf6-b4f5-45c2-8420-18ab4f1ba7e7 $ task _get c0ab2bf6-b4f5-45c2-8420-18ab4f1ba7e7.id 1 $ task _get 1.due.year 2014 $ task _get 1.due.julian 272
system.version |
The version of taskwarrior, for example:
$ task _get system.version 2.4.0 |
system.os |
The operating system, for example:
$ task _get system.os FreeBSD |
rc.<name> |
Any configuration value default, with any overrides from the
.taskrc applied, then with any command line overrides
applied last. For example:
$ task _get rc.data.location ~/.task |
<attribute> |
Any task attribute. Note that no task ID or UUID is specified,
so this variant is only useful on the command line like this:
$ task add Pay rent due:eom wait:'due - 3days'Note that 'due' is a DOM reference from earlier on the command line. |
<id>.<attribute> |
Any attribute of the specified task ID. For example:
$ task add Fix the leak depends:3 scheduled:3.dueThis makes the new task dependent on task 3, and scheduled on the due date of task 3. Note that '3.due' is a DOM reference of a specific task. |
<uuid>.<attribute> |
Any attribute of the specified task UUID, as above. |
Any attribute that is of type date
can be directly
accessed as a date, or it can be accessed by the elements of that
date. For example:
<date>.year |
2.4.0
The year, for example:
$ task _get 1.due.year 2014 |
<date>.month |
2.4.0
The month, for example:
$ task _get 1.due.month 9 |
<date>.day |
2.4.0
The day of the month, for example:
$ task _get 1.due.day 29 |
<date>.week |
2.4.0
The week number of the date, for example:
$ task _get 1.due.week 40 |
<date>.weekday |
2.4.0
The numbered weekday of the date, where 0 is Sunday
and 6 is Saturday. For example:
$ task _get 1.due.weekday 1 |
<date>.julian |
2.4.0
The Julian day of the date, which is the day number of the
date in the year. For example, January 1st is 1,
February 10th is 41. For example:
$ task _get 1.due.julian 272 |
<date>.hour |
2.4.0
The hour of the day, for example:
$ task _get 1.due.hour 0 |
<date>.minute |
2.4.0
The minute of the hour, for example:
$ task _get 1.due.minute 0 |
<date>.second |
2.4.0
The seconds of the minute, for example:
$ task _get 1.due.second 0 |
Tags can be accessed as a single item as an <attribute>
,
of the individual tags can be accessed:
tags.<literal> |
2.4.0
Direct access, per-tag, for example:
$ task _get 1.tag.home homeIf the tag is present, it is shown, otherwise the result is blank, and Taskwarrior exits with a non-zero status. $ task _get 1.tag.DUE DUE $ task _get 1.tag.OVERDUEWorkѕ for virtual tags too, in the same manner. |
Annotations are compound data structures, with two elements, which
are description
and entry
. Annotations
are accessed by an ordinal.
annotations.<N>.description |
2.4.0
The description of the Nth annotation, for example:
$ task _get 1.annotations.0.description |
annotations.<N>.entry |
2.4.0
The creation timestamp of the Nth annotation, for example:
$ task _get 1.annotations.0.entryNote that because entry is of type date ,
the individual elements can be addressed, as above, for example:
$ task _get 1.annotations.0.entry.year 2014 |
UDA values can be accessed in the same manner.