summaryrefslogtreecommitdiff
path: root/bin/menuscripts/td
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