taskhelper.sh 1.73 KB
#!/bin/zsh

function tasktimes() {
    [[ $# -eq 0 ]] && return 1

    local KEY=${2:-\\1}
    local T
    local D='([0-9]{4}-[0-9]{2}-[0-9]{2})'
    local N='([0-9]+)'
    local EXPR='s/'$D'.*PT('$N'H)?('$N'M)?('$N').*/'${KEY}':\3:\5:\7/;te;d;:e'

    task $1 info | sed -r ${EXPR} | awk -F: '
    {
        s = (d[$1][2] + $4) % 60
        _m = int((d[$1][2] + $4) / 60)
        m = (d[$1][1] + $3 + _m) % 60
        _h = int((d[$1][1] + $3 + _m) / 60)
        d[$1][0] += $2 + _h
        d[$1][1] = m
        d[$1][2] = s
    }
    END {
        for(i in d)
            printf("%s:%d:%d:%d\n", i, d[i][0], d[i][1], d[i][2])
    }' | sort -t: -k1
}

function tasktimestotal() {
    tasktimes $1 TOTAL
}

function taskdescription() {
    [[ $# -eq 0 ]] && return 1
    task $1 _unique description
}

function taskproject() {
    [[ $# -eq 0 ]] && return 1
    task $1 _unique project
}

function taskurgency() {
    [[ $# -eq 0 ]] && return 1
    task $1 _urgency | cut -d\  -f 4
}

function taskentry() {
    [[ $# -eq 0 ]] && return 1
    task $1 _unique entry
}

function taskend() {
    [[ $# -eq 0 ]] && return 1
    task $1 _unique end
}

function taskuuids() {
    local UUID

    [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \)
    for UUID in $(task $@ _uuid)
    do
        printf "%05.2f\037%s\037%s\n" \
            "$(taskurgency $UUID)" \
            "$(taskdescription $UUID)" \
            $UUID
    done | sort -t$'\037' -k1nr,2 | cut -d$'\037' -f3
}

function pendinguuids() {
    taskuuids +PENDING $@
}

function doneuuids() {
    taskuuids +COMPLETED $@
}

function blockeduuids() {
    taskuuids +BLOCKED $@
}

function blockinguuids() {
    taskuuids +BLOCKING $@
}

function deleteduuids() {
    taskuuids +DELETED $@
}

# vim: set et ts=4 sw=4: