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 | ||
6 | zmodload zsh/datetime | |
7 | ||
8 | __wakey_start=nil __wakey_cmd= | |
9 | : ${LONG_RUNNING_COMMAND_TIMEOUT=10}; export LONG_RUNNING_COMMAND_TIMEOUT | |
132a9791 | 10 | : ${IGNORE_WINDOW_CHECK=nil}; export IGNORE_WINDOW_CHECK |
aeba0b89 | 11 | : ${LONG_RUNNING_IGNORE_LIST=}; export LONG_RUNNING_IGNORE_LIST |
9778630e MW |
12 | |
13 | __wakey_preexec () { | |
14 | case $__wakey_start in | |
15 | nil) | |
aeba0b89 MW |
16 | case $LONG_RUNNING_IGNORE_LIST in |
17 | *" $1 "*) ;; | |
18 | *) __wakey_start=$EPOCHREALTIME __wakey_cmd=$1 ;; | |
19 | esac | |
9778630e MW |
20 | ;; |
21 | esac | |
22 | } | |
23 | ||
24 | __wakey_precmd () { | |
6131a252 | 25 | typeset icon head rc=$? cmd suppress=nil |
132a9791 | 26 | typeset -i 10 win i |
9778630e MW |
27 | typeset -F now=$EPOCHREALTIME |
28 | ||
29 | case $__wakey_start in | |
30 | nil) ;; | |
31 | *) | |
6131a252 MW |
32 | if (( now - __wakey_start < LONG_RUNNING_COMMAND_TIMEOUT )); then |
33 | suppress=t | |
132a9791 MW |
34 | else |
35 | case $IGNORE_WINDOW_CHECK in | |
36 | t) ;; | |
37 | *) | |
38 | win=$(xprop -root _NET_ACTIVE_WINDOW | sed 's/^.*# //') | |
39 | if (( win == WINDOWID )); then | |
40 | suppress=t | |
41 | else | |
42 | for i in $(xwininfo -children -id $win | | |
43 | sed -n '/^ *[0-9]\+ child\(ren\)\?[.:]$/,$ { | |
44 | /^ *\(0x[0-9a-f]\+\) (.*$/s//\1/p | |
45 | }') | |
46 | do | |
3c7d194d | 47 | if (( i == WINDOWID )); then suppress=t; break; fi |
132a9791 MW |
48 | done |
49 | fi | |
50 | esac | |
9778630e | 51 | fi |
6131a252 MW |
52 | case $suppress in |
53 | t) ;; | |
54 | *) | |
55 | case $rc in | |
56 | 0) icon=trophy-gold head="Command completed" ;; | |
57 | *) icon=dialog-warning head="Command FAILED (rc = $rc)" ;; | |
58 | esac | |
59 | cmd=${__wakey_cmd//&/&}; cmd=${cmd//</<}; cmd=${cmd//>/>} | |
60 | notify-send -c Wakey -i $icon -t 5000 $head $cmd | |
61 | esac | |
9778630e MW |
62 | __wakey_start=nil |
63 | ;; | |
64 | esac | |
65 | } | |
66 | ||
a0611691 MW |
67 | case ${DISPLAY-nil},${WINDOWID-nil} in |
68 | nil,* | *,nil) ;; | |
0b69235c MW |
69 | *) |
70 | if whence notify-send >/dev/null 2>&1; then | |
71 | preexec_functions+=(__wakey_preexec) | |
72 | precmd_functions+=(__wakey_precmd) | |
73 | fi | |
74 | ;; | |
75 | esac |