A collection of shell scripts to make my live easier.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.3 KiB

#!/bin/zsh
source $0:A:h/datetimehelper.sh
source $0:A:h/taskhelper.sh
source $0:A:h/ttyhelper.sh
function tasksallsince() {
[[ $# -lt 1 ]] && return 1
taskuuids \(\(\( +COMPLETED or +DELETED \) end.after:${1} \) \
or +PENDING \) $@
}
function datetimedescription() {
[[ $# -lt 1 ]] && return 1
for UUID in $(tasksallsince $@)
do
DESCRIPTION="$(taskdescription $UUID)"
PROJECT="$(taskproject $UUID)"
COMPLETED="$(taskuuids $UUID \( +COMPLETED or +DELETED \))"
for T in $(tasktimes $UUID)
do
extracttime $T
printf "%s;%s;%s;%s;%s\n" \
"$TIMEKEY" "$TIME" "$PROJECT" "$DESCRIPTION" "$COMPLETED"
done
done
}
function report() {
[[ $# -lt 1 ]] && return 1
local D DATE T
DATE=$1
for LINE in "${(f)$(datetimedescription $@|sort -t\; -f -k1,1 -k3,3)}"
do
set -- "${(@s(;))LINE}"
if [[ -n $1 && $(date -d $1 +%s) -ge $(date -d $DATE +%s) ]]
then
if [[ $D != $1 ]]
then
D=$1
printf "%s\n" $(underline "" $D)
fi
T=$2
if [[ -n $5 ]] && T=$(bold "" $T)
if [[ -n $D ]] && printf "%s [%s] - %s\n" "$T" "$3" "$4"
fi
done
}
function usage() {
local USAGE=$(cat <<-USAGE
Usage: %s [-?] [DATETIME] [FILTER]
OPTIONS:
-?, --help Show this help
-d, --date DATETIME is a date and time identifier as accepted by the
date command. It specifies how long back done tasks
should be considered.
FILTER can be additional taskwarriors filters to limit the result
any further.
USAGE
)
/usr/bin/printf "${USAGE}\n" $0
}
#
# parse command line arguments
#
SHORTOPTS=?d:
LONGOPTS=help,date
ARGS=$(getopt -o ${SHORTOPTS} --long ${LONGOPTS} -n report -- $@)
if [ $? -ne 0 ]
then
usage $0
exit 1
fi
eval set -- ${=ARGS}
unset ARGS
while true
do
case $1 in
'-?'|'--help')
shift
usage $0
exit 0
;;
'-d'|'--date')
DATEFROM=$(date -d ${2} +%Y-%m-%d)
shift 2
continue
;;
'--')
shift
break
;;
*)
echo 'Internal error!' >&2
exit 1
;;
esac
done
DATEFROM=${DATEFROM:-$(date +%Y-%m-01)}
report $DATEFROM $@
# vim: set et ts=4 sw=4: