blob: dd10af5769a1afbc77de5637b2bdd40c8d8ea907 (
plain)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/bin/sh
# colors
red="$(printf '\033[31m')"
blue="$(printf '\033[34m')"
cyan_light="$(printf '\033[36m')"
yellow="$(printf '\033[33m')"
green="$(printf '\033[32m')"
italic="$(printf '\033[3m')"
reset="$(printf '\033[0m')"
deadlines="$HOME/docs/filios"/deadlines
die() { >&2 printf '%s\n' "$*"; exit 1; }
usage()
{
cat <<EOF
usage: ddl [COMMAND] [ARGUMENT]
ddl lists deadlines
COMMANDS
new TEXT... add a new deadline
coming [NUM] show the nearest coming deadline(s)
delete NUM delete deadline by number
grep REGEX show deadlines matching regex
help show usage
edit edit file in \$EDITOR
EOF
exit 1
}
wrong_usage() { >&2 printf 'Wrong usage!\n'; usage; }
colorize()
{
sed \
-e "s/^#.*/${red}&${reset}/" \
-e "s/^\s*[-?!*].*/${cyan_light}&${reset}/" \
-e "s/([^()]\+)/${yellow}${italic}&${reset}/" \
-e "s/^\s*#.*/${blue}${italic}&${reset}/"
}
list_deadlines() { cat "$deadlines"; }
# list dates in chronological order
list_dates()
{
grep '^#' "$deadlines" |
sort -t '/' -k 3 -k 2 -k 1 -n |
uniq |
sed 's@/@.@g'
}
# shellcheck disable=SC2142
### MAIN
# Arguments without an option
case "$1" in
h*) usage ;;
e*) $EDITOR "$deadlines" ;;
c*)
i=1
list_dates | head -n "${2:-1}" |
while read -r date
do
sed -n "/$date/,/^#\|^$/p" "$deadlines" |
colorize |
sed "1s/.*/& ($green$i$reset)/"
i=$((i+1))
done ;;
"") list_deadlines | colorize ;;
*) false ;;
esac && exit
arg="$1"
shift
[ "$1" ] || wrong_usage
case "$arg" in
d*) sed -i "/$(list_dates | sed -n "${1}p")/,/^$/d" "$deadlines" ;;
*) wrong_usage ;;
esac
|