The Best Application for Command Line To-Do List Management
On my computer, the main application that is always running is the terminal emulator. Throughout my workflow, I always use console applications to perform various tasks. I want to talk about one simple but very functional utility that allows you to manage your tasks from the terminal emulator.
This utility is called Taskwarrior. This is an Open Source application and is available in the repositories of almost all Linux distributions, as well as in Homebrew for macOS. Information about the installation on your system can be found in the Downloads section on the utility’s website.
After installation, I recommend watching a simple video that shows the main features of the program.
Task management
Let’s practice!
You can view all added tasks with the task
command:
There’s nothing here right now, let’s add a task:
The task has been added, it has been assigned an ID
, time of adding and priority.
You can end a task with the done
command, specifying its ID
:
Tasks can be divided into projects:
You can view the tasks of a specific project by specifying its name:
For a simple to-do list, these commands are more than enough.
Advanced usage
You can view detailed information about tasks using the long
command:
You can view detailed information about a task with the info
command:
Adding a task priority
Usually, tasks, if there are many of them, have a priority. Taskwarrior supports three priorities for tasks:
H
— high priority;M
— medium priority;L
— low priority.
You can set the priority with the command priority:<PIORITY>
. For example:
The task will also change its color if your terminal emulator supports colors.
Adding tags
In addition to projects, tasks can be grouped by attaching appropriate tags to them. You can add multiple tags to one task. The following syntax is used for this:
Adding notes
You can add annotations to tasks. You can do this with the annotate
command:
Editing tasks
Created tasks can be edited. There are two ways to do this:
task 2 edit
— The task will open in the default text editor (mine is Vim).task 2 modify priority:L
— For quick editing of priorities or other parameters.
Task tracking
Current tasks can be tracked. To do this, simply start the one you need with the start
command:
The running task will also be highlighted. The Active column will show the time during which the task is being worked on.
You can stop a task with the stop
command.
Deleting a task
Any task can be completely deleted. To do this, use the delete
command.
Task execution time
For tasks, you can set a deadline when they must be completed. Taskwarrior supports several keywords, as well as specifying the date in a special format:
- tomorrow;
- today;
- someday;
- 1week;
- 1month;
- 2022–05–30.
You can set the date with the following command:
You can also view all tasks by date in a calendar view. You can call it with the command of the same name:
Appearance
The appearance of the application can be configured in its configuration file — ~/.taskrc
. To select a theme, simply uncomment the desired line.
I prefer the dark-blue-256
scheme.
Synchronization of tasks between different machines
I have several computers, so it is useful to synchronize tasks between them. I use Git for this. I have a personal GitLab that stores my pet projects, configs, scripts, knowledge base, blog source codes, and other useful things.
Taskwarrior is a utility with roots in UNIX, so it stores all of its contents in text format in the user’s home directory. And text files are well versioned with Git.
I clone the repository with the contents of the utility in ~
, and then override the location of the utility’s system files in its configuration file.
After the changes, it is enough to commit the changes, and all your tasks will be synchronized between all machines.
Conclusion
Taskwarrior has become an indispensable tool for me in my daily work. This simple application helps you quickly and efficiently manage tasks in your terminal. And synchronization with other machines allows you to quickly move from one computer to another without losing what you still need to do.