-  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'
-
-  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 || :