X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/4301ac900932c08e10e754a52acc51ce84ab77d1..HEAD:/.zsh/zshrc/parts.d/50-taskwarrior?ds=sidebyside diff --git a/.zsh/zshrc/parts.d/50-taskwarrior b/.zsh/zshrc/parts.d/50-taskwarrior index 2cf9d38..2ca20b9 100644 --- a/.zsh/zshrc/parts.d/50-taskwarrior +++ b/.zsh/zshrc/parts.d/50-taskwarrior @@ -1,7 +1,7 @@ # -# display ready taskwarrior tasks +# taskwarrior shell integration # -# Copyright © 1994–2017 martin f. krafft +# Copyright © 2018 martin f. krafft # Released under the terms of the Artistic Licence 2.0 # # Source repository: http://git.madduck.net/v/etc/zsh.git @@ -9,21 +9,52 @@ if whence task >/dev/null; then - alias t=task - alias ta='t add' - alias tn='t next' - alias tl='t all' - alias ty='t sync' - alias td='t done' - - 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 2>/dev/null || : - fi - unset SENTINEL + function task_() { + local filter cmd args nofilter=0 + cmd="$1"; shift + + case "$cmd" in + (add|attach|call) nofilter=1;; + esac + + for i in "$@"; do + case "$nofilter@$i" in + (0@<->) :;& + (0@/*/) filter="${filter:+$filter }$i";; + (*) args="${args:+$args }$i";; + esac + done + eval task $filter $cmd $args + } + + 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