DOM - Document Object Model
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
Supported References
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.due
This 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 home
If 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.OVERDUE
Workѕ 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.entry
Note that because
entry
is of typedate
, 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.