- Description:
- Handling TODO items with "pain lists"
- Owner:
- pesco
- Last Change:
- Clone URL:
https://code.khjk.org/painlist.git
Commit Briefs
add test data (main)
tl: make the script Linux compatible
Use the GNU coreutils syntax for stat(1) if uname(1) says Linux.
improve (Linux) compatibility
The xor() function is a non-standard extension to awk(1) and 'lines' is the terminfo(5) name for the 'li' termcap(5) capability.
Branches
Tree
README | commits | blame |
painlist* | commits | blame |
test.todo | commits | blame |
tl* | commits | blame |
README
Handling TODO items with "pain lists" ======================================= The 'painlist' program reads items (tasks/bugs/issues/...) on stdin, one per line, not indented. Items are arbitrary text, rated by adding ">AxBxC<" anywhere on the line, where A,B,C,... are rating numbers in arbitrary categories. Any number of categories can be used. If a non-option argument is given, it is interpreted as an extended regular expression to filter for. The -v option inverts the filter. Empty lines and those containing only a shell-style comment (#) are ignored. In-line comments are not recognized; this allows the use of hash-tags. the rating scale is always 1-9; 9 should always be used for the highest level. Coarser scales should be mapped to 1-9 by ignoring some levels; for instance, use 1,3,5,7,9 for a 5-level scale. It is recommended to document a clear meaning for each level to make rating easy and unambiguous. the value of a pain tag (">...<") is the geometric mean of the ratings. An item can have multiple pain tags which are summed. the output sorts items by pain value. A solid line visualizes a configurable threshold (default -t 6). A dotted line shows the weighted median (half of total pain). Higher-value items are shown in a brighter shade. EXTRA FEATURES ---------------- It is suggested to use the following features only in specific circumstances as indicated. - Text in square brackets [...] at the beginning of a line is highlighted in the output. This can be used for example to mark items with a planned time. - Items can be marked for urgency after time T by adding a tag of the form "!T" where T is given in (fractional) megaseconds after the Unix epoch. Yes, it is awkward, but also simple. How to convert using GNU date: $ when() { echo $(($(date +%s -d "$1") / 1e6)); } $ when tomorrow 1459.43703 (Hint: Round to the first decimal place, a day is 86.4ks.) Urgent items are displayed in red. Use this feature to flag items before it becomes too late to act on them. - Items marked with a tag of the form "^T" will be ignored until time T. Use this for items that cannot or should not be acted on before the given time. - Indented (non-comment) lines below an item are interpreted as items pending completion of their parent. For each child, a green plus sign is appended to the parent item. Pending items are not shown themselves but count toward the pain value of their parent. Use this to account for but otherwise hide items that strictly depend on the completion of another. REFERENCES ------------ Daniel Cook, "Improving Bug Triage with User Pain", 2008 https://lostgarden.home.blog/2008/05/20/improving-bug-triage-with-user-pain/