3 ## This idea shamelessly stolen from Jonathan Lange's `undistract-me'; see
4 ## <https://github.com/jml/undistract-me>.
6 __wakey_start=nil __wakey_cmd=
7 : ${LONG_RUNNING_COMMAND_TIMEOUT=10}; export LONG_RUNNING_COMMAND_TIMEOUT
8 : ${IGNORE_WINDOW_CHECK=nil}; export IGNORE_WINDOW_CHECK
9 : ${LONG_RUNNING_IGNORE_LIST=}; export LONG_RUNNING_IGNORE_LIST
12 case $__wakey_start in
14 case " $LONG_RUNNING_IGNORE_LIST " in
16 *) __wakey_start=$SECONDS __wakey_cmd=$1 ;;
23 local icon head rc=$? cmd suppress=nil win i now=$SECONDS
25 case $__wakey_start in
28 if (( now - __wakey_start < LONG_RUNNING_COMMAND_TIMEOUT )); then
31 case $IGNORE_WINDOW_CHECK in
34 win=$(xprop -root _NET_ACTIVE_WINDOW | sed 's/^.*# //')
35 if (( win == WINDOWID )); then
38 for i in $(xwininfo -tree -id $win |
39 sed -n '/^ *[0-9]\+ child\(ren\)\?[.:]$/,$ {
40 /^ *\(0x[0-9a-f]\+\) (.*$/s//\1/p
43 if (( i == WINDOWID )); then suppress=t; break; fi
52 0) icon=trophy-gold head="Command completed" ;;
53 *) icon=dialog-warning head="Command FAILED (rc = $rc)" ;;
55 cmd=${__wakey_cmd//&/&}; cmd=${cmd//</<}; cmd=${cmd//>/>}
56 notify-send -c Wakey -i $icon -t 5000 $head $cmd
63 case ${DISPLAY-nil},${WINDOWID-nil} in
66 if whence notify-send >/dev/null 2>&1; then
67 preexec_functions+=(__wakey_preexec)
68 precmd_functions+=(__wakey_precmd)