Context

A context is associated with a location. An example of this might be that you perform tasks in three locations:

  • At the office
  • At home
  • Study

The tasks that pertain to your time in the office are meaningless if you are at home, and vice versa. This is just an example, and your contexts will likely be very different.

If Taskwarrior allowed you to specify which context is currently active, then the tasks listed could be filtered accordingly You would then be working within a context. A context is therefore a named filter, and the current context is a form of default filter.

Defining a Context

In order to work within a context, you first need to define that context. Because a context is essentially a task filter, defining a context is really defining a named filter. In this example, we define our contexts from the list above using the new context define command:

$ task context define work +work or +freelance
$ task context define study +school or +homework or +lab
$ task context define home -work -freelance -school -homework -lab

The context definition may contain any form of algebraic expression just like a filter. In the example, the contexts are based entirely on tags. Notice that home is defined as neither work nor study. This means that every task is accounted for, although this is not necessary.

It is an error to try to define a context with the names define, list, show, none, or delete.

Setting the Context

To set or switch the current context, simply:

$ task context home
$ task list
...

If you try to use an undefined context, Taskwarrior will report an error.

Now with the context set to home, all the tasks listed will pertain to the home context, as defined. There will be a footnote after every report that reminds you of the current context.

Showing the Context

Although the current context is included in a footnote after every report, this can be disabled with the verbosity controls. To show the current context:

$ task context show
home

This can also be obtained using _get:

$ task _get rc.context
home

Listing All Contexts

You can list all the contexts using the new context list command:

$ task context list
Context Filter
------- ----------------------------------
home    -work -freelance -school -homework
study   +school or +homework
work    +work or +freelance

Clearing the Context

To clear the current context:

$ task context none

The context none has special meaning All subsequent commands will not have any implicit context filters applied.

Deleting a Context

To delete one of the contexts:

$ task context delete study

Now you can no longer set the context to study. If the current context was already study when you deleted it, the context is cleared.

Impact on Commands

All reports that accept filters will use the context if one is defined and set.

The tasksh program will show the current context in its prompt.

Implementation Details

Context will be stored in rc.context and defined contexts will be stored as rc.context.<name> in the .taskrc file.

When a context filter is used, it will be implicitly surrounded by parentheses, so that it may contain arbitrary logic.