Blame


1 b9a2c057 2022-07-17 rnkn #!/bin/sh
2 b9a2c057 2022-07-17 rnkn
3 7bc3108e 2022-08-04 rnkn set -o pipefail
4 b9a2c057 2022-07-17 rnkn program=$(basename "$0")
5 b9a2c057 2022-07-17 rnkn fail() { echo "$1"; exit 1; }
6 b9a2c057 2022-07-17 rnkn
7 b9a2c057 2022-07-17 rnkn todo_file="${TODO_FILE:-${PWD}/TODO}"
8 b9a2c057 2022-07-17 rnkn
9 b9a2c057 2022-07-17 rnkn test -f "$todo_file" || fail "TODO_FILE not found"
10 b9a2c057 2022-07-17 rnkn
11 b9a2c057 2022-07-17 rnkn usage() {
12 84d6904d 2022-07-21 rnkn echo "usage: $program TASK"
13 84d6904d 2022-07-21 rnkn echo " $program [-d LINENUM] [-e] [-Ss QUERY]"
14 b9a2c057 2022-07-17 rnkn }
15 b9a2c057 2022-07-17 rnkn
16 b9a2c057 2022-07-17 rnkn # t_done(int)
17 b9a2c057 2022-07-17 rnkn t_done() {
18 b9a2c057 2022-07-17 rnkn int=$1
19 b9a2c057 2022-07-17 rnkn tmpfile=$(mktemp)
20 b9a2c057 2022-07-17 rnkn sed -n "${int}!p" "$todo_file" > "$tmpfile"
21 84d6904d 2022-07-21 rnkn mv "$todo_file" "${todo_file}~"
22 b9a2c057 2022-07-17 rnkn mv "$tmpfile" "$todo_file"
23 b9a2c057 2022-07-17 rnkn }
24 b9a2c057 2022-07-17 rnkn
25 b9a2c057 2022-07-17 rnkn t_print() {
26 b9a2c057 2022-07-17 rnkn lines=$(wc -l < "$todo_file")
27 b9a2c057 2022-07-17 rnkn width=$(echo $lines | wc -c)
28 84d6904d 2022-07-21 rnkn nl -s' ' -w"$width" "$todo_file"
29 b9a2c057 2022-07-17 rnkn }
30 b9a2c057 2022-07-17 rnkn
31 b9a2c057 2022-07-17 rnkn main() {
32 84d6904d 2022-07-21 rnkn if getopts hed:S:s: opt; then
33 b9a2c057 2022-07-17 rnkn case "$opt" in
34 b9a2c057 2022-07-17 rnkn (e) $EDITOR "$todo_file"
35 b9a2c057 2022-07-17 rnkn exit ;;
36 b9a2c057 2022-07-17 rnkn (d) t_done "$OPTARG"
37 b9a2c057 2022-07-17 rnkn exit ;;
38 84d6904d 2022-07-21 rnkn (S) t_print | grep -iw "$OPTARG"
39 84d6904d 2022-07-21 rnkn exit ;;
40 84d6904d 2022-07-21 rnkn (s) t_print | grep -i "$OPTARG"
41 84d6904d 2022-07-21 rnkn exit ;;
42 b9a2c057 2022-07-17 rnkn (h) usage
43 b9a2c057 2022-07-17 rnkn exit ;;
44 b9a2c057 2022-07-17 rnkn (?) usage
45 b9a2c057 2022-07-17 rnkn exit 1 ;;
46 b9a2c057 2022-07-17 rnkn esac
47 b9a2c057 2022-07-17 rnkn elif test -n "$1"; then
48 b9a2c057 2022-07-17 rnkn echo "$@" >> "$todo_file"
49 b9a2c057 2022-07-17 rnkn else
50 b9a2c057 2022-07-17 rnkn t_print
51 b9a2c057 2022-07-17 rnkn fi
52 b9a2c057 2022-07-17 rnkn }
53 b9a2c057 2022-07-17 rnkn
54 b9a2c057 2022-07-17 rnkn main "$@"