dot/shell-rc, dot/bashrc, dot/zshrc: Introduce a formal notion of hooks.
[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
6zmodload 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
47 if (( i == WINDOWID )) then; suppress=t; break; fi
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//&/&amp;}; cmd=${cmd//</&lt;}; cmd=${cmd//>/&gt;}
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
67case ${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 ;;
75esac