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