LinuxCommandLibrary

todo

Manage and track todo list items

TLDR

List startable tasks

$ todo list --startable
copy

Add a new task to the work list
$ todo new [thing_to_do] --list [work]
copy

Add a location to a task with a given ID
$ todo edit --location [location_name] [task_id]
copy

Show details about a task
$ todo show [task_id]
copy

Mark tasks with the specified IDs as completed
$ todo done [task_id1 task_id2 ...]
copy

Delete a task
$ todo delete [task_id]
copy

Delete done tasks and reset the IDs of the remaining tasks
$ todo flush
copy

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.

SEE ALSO

task(1), grep(1), sed(1), vim(1), nano(1), remind(1)

Copied to clipboard