blob: 7243f77f3027acd8887b4f6ea3937e398dfd8e7f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#!/bin/sh
#preset vars
EDITOR=${EDITOR:-vi}
TODO=${TODO:-$HOME/todo}
#empty opt vars
ADD=""
DELETE=""
NUM=""
CHANGE=""
ARCHIVE=""
ug_err()
{
echo "${1}" 1>&2 && return "${2:-1}"
}
usage()
{
ug_err "usage: ${0##*/} [[-e | -x ] | [-n num] [-a message | -d [num]]
-e edit todo in $EDITOR
-x show completed tasks
-n num operate on line num
-a string add string to todo
-d [num] delete line num"
}
while getopts a:d:en:x arg; do
case ${arg} in
a) ADD=${OPTARG};;
d) DELETE=true
NUM=${OPTARG};;
e) CHANGE=true;;
n) NUM=${OPTARG};;
x) ARCHIVE=true;;
*) usage;;
esac
done
#satisfies -a
if [ -n "$ADD" ]; then
if [ -n "$NUM" ]; then
TMP=$(mktemp)
sed "${NUM}i\\
$ADD
" < "$TODO" > "$TMP" && mv "$TMP" "$TODO"
else
printf '%s\n' "$ADD" >> "$TODO"
fi
exit
fi
#satisfies -d
if [ -n "$DELETE" ]; then
TMP=$(mktemp)
date +"%F %T - $(sed -n "${NUM}p" "$TODO")" >> "${TODO}.complete"
sed "${NUM}D" < "$TODO" > "$TMP" && mv "$TMP" "$TODO"
exit
fi
#satisfies -e
if [ -n "$CHANGE" ]; then
"$EDITOR" "$TODO"
exit
fi
#satisfies -x and no flags
if [ -z "$ADD" ] && [ -z "$DELETE" ] && [ -z "$CHANGE" ]; then
if [ -n "$ARCHIVE" ]; then
! [ -e "${TODO}.complete" ] && touch "${TODO}.complete"
cat < "${TODO}.complete"
elif [ -z "$*" ]; then
nl "${TODO}"
fi
exit
fi
|