blob: e905d9b405a8b2f222a4894008419f8e65873c2c (
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
  | 
#!/bin/sh
todo="$HOME/docs/filios"/todo
die() { >&2 printf '%s\n' "$*"; exit 1; }
usage()
{
    cat <<EOF
usage: td [COMMAND] [ARGUMENT]
        td                  lists to-do's
COMMANDS
        new TEXT...         add a new to-do
        clear               remove all to-do's
        delete NUMBER       delete a to-do by number
        grep REGEX          show to-do's matching regex
        help                show usage
        move NUMBER NUMBER  change priority of a to-do
        edit                edit file in \$EDITOR
EOF
    exit 1
}
wrong_usage() { >&2 printf 'Wrong usage!\n'; usage; }
list_todos() { 
    [ ! -r "$todo" ] && die "No to-do's."
    [ "$(wc -l < "$todo")"  -eq 0 ] && die "No to-do's."
    awk '{print NR ": " $0}' "$todo"
}
# shellcheck disable=SC2142
### MAIN
# Arguments without an option
case "$1" in
    c*) rm -f "$todo"; >&2 printf 'Cleared.\n' ;;
    h*) usage ;;
    e*) $EDITOR "$todo" ;;
    "") list_todos ;;
    *) false ;;
esac && exit
arg="$1"
shift
[ "$1" ] || wrong_usage
case "$arg" in
    n*)
        printf '%s\n' "$*" >> "$todo"
        list_todos ;;
    d*)
        sed -i -n "$1!p" "$todo"
        list_todos ;;
    g*) list_todos | grep "$*" ;;
    m*)
        [ "$2" ] || wrong_usage
        line="$(list_todos | sed "/^$1:/!d;s/^$1: //")"
        sed -i "${1}d;${2}i${line}" "$todo"
        list_todos ;;
    *) wrong_usage ;;
esac
  |