todo
Manage and track todo list items
TLDR
List startable tasks
Add a new task to the work list
Add a location to a task with a given ID
Show details about a task
Mark tasks with the specified IDs as completed
Delete a task
Delete done tasks and reset the IDs of the remaining tasks
SYNOPSIS
todo [action] [item#] [text]
todo [action] [options]
PARAMETERS
add "Task description"
Adds a new task to your todo list. Quotes are recommended for tasks with spaces.
ls [filter]
Lists tasks. Can be filtered by keywords, projects, or contexts (e.g., ls +work @home).
do
Marks a task as done. The task is moved from todo.txt to done.txt.
del
Deletes a task from the todo list.
pri
Sets or changes the priority of a task. 'A' is the highest priority.
archive
Moves all completed tasks from todo.txt to done.txt, if not already moved by 'do'.
listall
Lists all tasks, including those marked as done in done.txt.
report
Displays statistics about your todo list, such as task counts.
help [action]
Shows help for the command or a specific action.
DESCRIPTION
The todo command, commonly implemented as the todo.sh script, is a lightweight, portable, and extensible command-line tool for managing your tasks using a simple, human-readable plain text file format known as todo.txt.
It enables users to quickly add, list, prioritize, mark as complete, and archive tasks directly from the terminal, without the need for complex databases or graphical interfaces. Its strength lies in its simplicity and reliance on standard text files, making task lists easily accessible, editable with any text editor, and seamlessly integrable with version control systems or cloud synchronization services. The todo.txt format itself allows for projects (prefixed with '+') and contexts (prefixed with '@'), providing basic categorization capabilities. This utility is ideal for users who prefer a minimalist, keyboard-driven workflow for personal task management.
CAVEATS
The 'todo' command is not a standard, pre-installed utility on most Linux distributions. It typically refers to a third-party script, most notably todo.sh by ginat, which needs to be downloaded and configured by the user. Therefore, its availability and exact behavior can vary depending on the specific script version or custom implementations. It relies on plain text files, which, while simple, might not scale well for extremely large task lists or scenarios requiring robust multi-user access and synchronization without external tools.
FILE FORMAT AND LOCATION
The todo command primarily operates on two files: todo.txt (for active tasks) and done.txt (for completed tasks). By default, these files are usually expected in the user's home directory (~/todo.txt and ~/done.txt), though their location can often be configured via environment variables.
EXTENSIBILITY
todo.sh is highly extensible through an add-on system, allowing users to create or install custom scripts to add new functionalities or integrate with other tools. This makes it very flexible for tailored workflows.
SYNCHRONIZATION
Due to its plain text nature, todo lists can be easily synchronized across devices using standard file synchronization services like Dropbox, Google Drive, or version control systems like Git, without any special software.
HISTORY
The concept of managing tasks using plain text files gained significant traction with the introduction of the todo.txt format by Gina Trapani in 2006. She proposed a simple, human-readable convention for task entries, including priority, creation date, completion date, projects, and contexts. The todo.sh script emerged as the official and most widely adopted command-line interface to interact with these todo.txt files, embodying the philosophy of simplicity, portability, and independence from complex software. Its development has focused on maintaining a minimal footprint while providing essential task management features, making it a popular choice for command-line enthusiasts.