Commit | Line | Data |
---|---|---|
9778630e MW |
1 | ### -*-sh-*- |
2 | ||
3 | ## This idea shamelessly stolen from Jonathan Lange's `undistract-me'; see | |
4 | ## <https://github.com/jml/undistract-me>. | |
5 | ||
9778630e MW |
6 | __wakey_start=nil __wakey_cmd= |
7 | : ${LONG_RUNNING_COMMAND_TIMEOUT=10}; export LONG_RUNNING_COMMAND_TIMEOUT | |
132a9791 | 8 | : ${IGNORE_WINDOW_CHECK=nil}; export IGNORE_WINDOW_CHECK |
aeba0b89 | 9 | : ${LONG_RUNNING_IGNORE_LIST=}; export LONG_RUNNING_IGNORE_LIST |
9778630e MW |
10 | |
11 | __wakey_preexec () { | |
12 | case $__wakey_start in | |
13 | nil) | |
0621c557 | 14 | case " $LONG_RUNNING_IGNORE_LIST " in |
aeba0b89 | 15 | *" $1 "*) ;; |
1bea7f5c | 16 | *) __wakey_start=$SECONDS __wakey_cmd=$1 ;; |
aeba0b89 | 17 | esac |
9778630e MW |
18 | ;; |
19 | esac | |
20 | } | |
21 | ||
22 | __wakey_precmd () { | |
bb834f36 | 23 | local icon head rc=$? cmd suppress=nil win i now=$SECONDS |
9778630e MW |
24 | |
25 | case $__wakey_start in | |
26 | nil) ;; | |
27 | *) | |
6131a252 MW |
28 | if (( now - __wakey_start < LONG_RUNNING_COMMAND_TIMEOUT )); then |
29 | suppress=t | |
132a9791 MW |
30 | else |
31 | case $IGNORE_WINDOW_CHECK in | |
32 | t) ;; | |
33 | *) | |
57a3a881 | 34 | win=$(xprop -root _NET_ACTIVE_WINDOW | sed 's/^.*[#=] //') |
56366bec | 35 | if [[ $win = *"not found." ]] || (( win == WINDOWID )); then |
132a9791 | 36 | suppress=t |
d75ab17a MW |
37 | elif (( win == 0 )); then |
38 | : | |
132a9791 | 39 | else |
21ded11f | 40 | for i in $(xwininfo -tree -id $win 2>/dev/null | |
132a9791 MW |
41 | sed -n '/^ *[0-9]\+ child\(ren\)\?[.:]$/,$ { |
42 | /^ *\(0x[0-9a-f]\+\) (.*$/s//\1/p | |
43 | }') | |
44 | do | |
3c7d194d | 45 | if (( i == WINDOWID )); then suppress=t; break; fi |
132a9791 MW |
46 | done |
47 | fi | |
48 | esac | |
9778630e | 49 | fi |
6131a252 MW |
50 | case $suppress in |
51 | t) ;; | |
52 | *) | |
53 | case $rc in | |
54 | 0) icon=trophy-gold head="Command completed" ;; | |
55 | *) icon=dialog-warning head="Command FAILED (rc = $rc)" ;; | |
56 | esac | |
57 | cmd=${__wakey_cmd//&/&}; cmd=${cmd//</<}; cmd=${cmd//>/>} | |
6e3de426 | 58 | notify-send -c Wakey -i $icon -t 5000 "$head" "$cmd" |
6131a252 | 59 | esac |
9778630e MW |
60 | __wakey_start=nil |
61 | ;; | |
62 | esac | |
63 | } | |
64 | ||
ba14abd8 | 65 | case ${DISPLAY+t},${WINDOWID+t},${__mdw_precmd_hook+t},${__mdw_preexec_hook+t} in |
f0dc3124 | 66 | t,t,t,t) |
d040dbc2 | 67 | if __mdw_programp notify-send; then |
05e32650 MW |
68 | __mdw_addhook __mdw_preexec_hook __wakey_preexec |
69 | __mdw_addhook __mdw_precmd_hook __wakey_precmd | |
0b69235c MW |
70 | fi |
71 | ;; | |
72 | esac |