Skip to content
Brett Terpstra edited this page Jan 17, 2022 · 8 revisions

Doing uses TaskPaper @tags for searching and filtering, as well as for time tracking. Just include @tags in the text of your entries to make them searchable, sortable, and trackable.

For example, tag a an entry with @coding and @project1 by running doing now @coding a new plugin for @project1, and another entry with doing now @coding some stuff for @project2. Now you can display both entries with doing show @coding, or just show a single project's entries with doing show @project1. All of the display and view commands allow combining tags with AND, OR, or NOT booleans.

doing tag adds one or more tags to the last entry, or specify a count with -c X. Tags are specified as basic arguments, separated by spaces. For example:

doing tag -c 3 client cancelled

... will mark the last three entries as @client @cancelled. Add -r/--remove as a switch to remove the listed tags instead. Use --search to add tags based on search results, and you can do interactive batch tagging using doing select. If you want to include a value (e.g. @tag(value)), use the -v/--value flag, e.g. doing tag progress -v 50.

You can also have tags added automatically based on keywords. See Autotagging.

The @done tag is the only tag Doing mandates internally. This is added to an entry when you mark it finished, and the timestamp is included as a tag value in parenthesis, e.g. @done(2021-12-23 05:35). Any tag can have a value, but at present Doing doesn't have any means of querying based on tag values.

Doing can also flag entries. By default it uses @flagged, but this can be changed in the configuration. You can add a @flagged tag to the last note with doing flag. Remove a flag with doing flag -r.

Time tracking

Each tag used gets an elapsed time (the time between the entry creation and the value of the @done tag) recorded for every entry it appears on. When running display commands, you can use --totals to see the total time tracked for each tag.

doing show --totals outputs something like:

Tag Totals

Filtering

The show command can display entries containing specific tags just by prefixing an argument with @. doing show @work will show all entries tagged @work. You can have multiple tag arguments and combine them with booleans (and, or, not). For example, to show all entries tagged both @personal and @writing:

doing show @personal @writing --bool and

Most commands accept a --tag flag. For example, if you wanted to repeat an entry yesterday tagged @marvelous, you would run doing again --tag marvelous, and the last entry tagged @marvelous would be duplicated as a new entry. Multiple tags can be combined with commas, and you can define the boolean using --bool with and, or, or not.

doing again --tag work,project1 --bool and

doing cancel --tag work,writing --bool or

Tag Values

Tags can have values appended in parenthesis. The @done tag is an example of this, where @done(2022-01-15 12:00) has a date value. A value can be any text or number. For example, you can track progress on something using @progress(50) or @completed(25%), or define a scope using @context(Work) or @context(Personal).

When adding tags with doing tag, you can include --value VAL to specify a value for the new tag, e.g. doing tag context --value Personal would add @context(Personal) to the last entry. When including tags in the entry title, just add the parenthesis and the value inline. If more than one tag is passed as an argument, the value will be applied to all of them, so this is best used with a single tag. If the tag already exists, its value will be updated.

When adding tags interactively using doing select -> add tag, you can include a value in the tag when requested, e.g. progress(50). Spaces are allowed in tag values.

Querying Tag Values

See Tag And Search Filtering