dot-emacs_DEPS = make-regexp
SCRIPTLINKS += emacsclient-hack movemail-hack sendmail-hack
-SCRIPTLINKS += aspell-hack emerge-hack
+SCRIPTLINKS += aspell-hack emerge-hack wakey.zsh
%.elc: %.el $$(foreach e, $$($$*_DEPS), $$(DEP_$$e))
$(call v_tag,EMACS)if ! $(EMACS) >$*.build-log 2>&1 \
--- /dev/null
+### -*-sh-*-
+
+## This idea shamelessly stolen from Jonathan Lange's `undistract-me'; see
+## <https://github.com/jml/undistract-me>.
+
+zmodload zsh/datetime
+
+__wakey_start=nil __wakey_cmd=
+: ${LONG_RUNNING_COMMAND_TIMEOUT=10}; export LONG_RUNNING_COMMAND_TIMEOUT
+
+__wakey_preexec () {
+ case $__wakey_start in
+ nil)
+ __wakey_start=$EPOCHREALTIME __wakey_cmd=$1
+ ;;
+ esac
+}
+
+__wakey_precmd () {
+ typeset icon head rc=$? cmd
+ typeset -F now=$EPOCHREALTIME
+
+ case $__wakey_start in
+ nil) ;;
+ *)
+ if (( now - __wakey_start >= LONG_RUNNING_COMMAND_TIMEOUT )); then
+ case $rc in
+ 0) icon=trophy-gold head="Command completed" ;;
+ *) icon=dialog-warning head="Command FAILED (rc = $rc)" ;;
+ esac
+ cmd=${__wakey_cmd//&/&}; cmd=${cmd//</<}; cmd=${cmd//>/>}
+ notify-send -c Wakey -i $icon -t 5000 $head $cmd
+ fi
+ __wakey_start=nil
+ ;;
+ esac
+}
+
+preexec_functions+=(__wakey_preexec)
+precmd_functions+=(__wakey_precmd)