### -*-sh-*- ## This idea shamelessly stolen from Jonathan Lange's `undistract-me'; see ## . __wakey_start=nil __wakey_cmd= : ${LONG_RUNNING_COMMAND_TIMEOUT=10}; export LONG_RUNNING_COMMAND_TIMEOUT : ${IGNORE_WINDOW_CHECK=nil}; export IGNORE_WINDOW_CHECK : ${LONG_RUNNING_IGNORE_LIST=}; export LONG_RUNNING_IGNORE_LIST __wakey_preexec () { case $__wakey_start in nil) case " $LONG_RUNNING_IGNORE_LIST " in *" $1 "*) ;; *) __wakey_start=$SECONDS __wakey_cmd=$1 ;; esac ;; esac } __wakey_precmd () { local icon head rc=$? cmd suppress=nil win i now=$SECONDS case $__wakey_start in nil) ;; *) if (( now - __wakey_start < LONG_RUNNING_COMMAND_TIMEOUT )); then suppress=t else case $IGNORE_WINDOW_CHECK in t) ;; *) win=$(xprop -root _NET_ACTIVE_WINDOW | sed 's/^.*# //') if (( win == WINDOWID )); then suppress=t else for i in $(xwininfo -tree -id $win | sed -n '/^ *[0-9]\+ child\(ren\)\?[.:]$/,$ { /^ *\(0x[0-9a-f]\+\) (.*$/s//\1/p }') do if (( i == WINDOWID )); then suppress=t; break; fi done fi esac fi case $suppress in t) ;; *) case $rc in 0) icon=trophy-gold head="Command completed" ;; *) icon=dialog-warning head="Command FAILED (rc = $rc)" ;; esac cmd=${__wakey_cmd//&/&}; cmd=${cmd///>} notify-send -c Wakey -i $icon -t 5000 "$head" "$cmd" esac __wakey_start=nil ;; esac } case ${DISPLAY+t},${WINDOWID+t},${__mdw_precmd_hook+t},${mdw__preexec_hook+t} in t,t,t,t) ;; *) if __mdw_programp notify-send ; then __mdw_addhook __mdw_preexec_hook __wakey_preexec __mdw_addhook __mdw_precmd_hook __wakey_precmd fi ;; esac