/todo

print next tasks

Primary LanguageAwk

                                todo(1)

Todo(1) reads files for tasks, one task per line; and writes to the
standard output those tasks that should be done, and that are not
blocked by other undone tasks, ordered in decreasing order of urgency
(the most urgent the task is, the first it is listed).

A task has the following syntax:

{
	[STATUS] NAME: [PRIORITY] DESCRIPTION [PROPERTY:VALUE]...
}

Each task begins with an optional status.  Two status are possible: TODO
(which defines a uncompleted task) or DONE (which defines a completed
task).  If no status is supplied, it is considered as TODO.

After the status comes the obligatory task name.  The task name is a
single alphanumeric word without spaces that names the task.  The task
name must be followed by a colon.

After the task name comes the optional priority.  The priority is a
single uppercase letter between parentheses.  The letter must be A, B or
C.  The lower the letter, the higher the priority; so “A” is the higher
priority.

Then, comes the obligatory task description.  The task description spans
to the beginning of the first property.

After the task description comes the properties.  Properties are a space-
delimited list of name-value pairs separated by colon.  The following
property names and their respective values are listed below.
• due: A property of the form due:YYYY-MM-DD specifies the deadline of
       the task.
• deps: A property of the form deps:dep1,dep2,…,depN specifies a comma-
        delimited list of tasks that this task depends on.

For example, consider the following input.

{
	DONE project: (B) Initial project for todo(1).
	TODO manual:  (C) Write manual for todo(1).              due:2021-12-13
	TODO usage:   (B) Think in a interface for todo(1)
	TODO data:    (A) Implement data structures for tasks.   deps:project
	TODO parser:  (B) Write code for parsing tasks.          deps:data
	TODO algor:   (A) Implement algorithm for sorting tasks. deps:parser
	TODO todo:    (B) Write the todo(1) utility.             deps:parser,algor
	TODO release: (C) Release todo(1).                       deps:todo,manual
}

If today were 11 December 2021, then running todo(1) on this input
would print the following:

{
	(C) Write manual for todo(1). due:2021-12-13
	(A) Implement data structures for tasks.
	(B) Think in a interface for todo(1)
}

Note that, although the task to write the manual has low priority (C),
it is listed first because its deadline is near and there is a task that
depends on it.

This software is in public domain and is provided AS IS, with NO WARRANTY.