#
-# display ready taskwarrior tasks
+# taskwarrior shell integration
#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Copyright © 2018 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
# Source repository: http://git.madduck.net/v/etc/zsh.git
if whence task >/dev/null; then
- alias t=task
- alias t\?='alias -rm t t[a-z]'
- alias ta='t add'
- alias tn='t next'
- alias tl='t all'
- alias ty='t sync'
- alias td='t done'
- alias te='t edit'
- alias tm='t modify'
+ function task_() {
+ local spec cmd args nospec=0
+ cmd="$1"; shift
+ [[ "$cmd" = add ]] && nospec=1
+ for i in "$@"; do
+ case "$nospec@$i" in
+ (0@<->) :;&
+ (0@/*/) spec="${spec:+$spec }$i";;
+ (*) args="${args:+$args }$i";;
+ esac
+ done
+ eval task $spec $cmd $args
+ }
- local SENTINEL=${XDG_RUNTIME_DIR}/taskwarrior/shell_run_sentinel
- mkdir --parent ${SENTINEL%/*}
- # only print the tasks at most once every 30 seconds
- if [[ -t 0 ]] && [[ -z ${SENTINEL}(#qNms-30) ]]; then
- touch ${SENTINEL}
- task rc.color:off 2>/dev/null || :
- fi
- unset SENTINEL
+ function task_postpone() {
+ local args
+ for i in scheduled due until wait; do
+ if [[ -n "$(eval task _get "$1"."$i")" ]]; then
+ args="${args:+$args }${i}:${i}+$2"
+ fi
+ done
+ eval task "$1" modify $args
+ }
+
+ alias t\?='alias -rm t t[-+a-z] | sed -r "s,_ ?, ,"'
+ alias ta='task_ add'
+ alias tc='task_ call'
+ alias th='task_ attach'
+ alias tl='task_ all'
+ alias ty='task_ next rc.recurrence=on >/dev/null && task_ sync'
+ alias td='task_ done'
+ alias te='task_ edit'
+ alias tu='task_ undo'
+ alias tm='task_ modify'
+ alias ts='task_ start'
+ alias tw='task_ waiting'
+ alias tp='task_postpone'
+ alias t+='task_ annotate'
+ alias t='task_ ""'
+
+ run_at_most_every 5m \
+ t 2>/dev/null || :
fi
# vim:ft=zsh