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 | |
aeba0b89 | 10 | : ${LONG_RUNNING_IGNORE_LIST=}; export LONG_RUNNING_IGNORE_LIST |
9778630e MW |
11 | |
12 | __wakey_preexec () { | |
13 | case $__wakey_start in | |
14 | nil) | |
aeba0b89 MW |
15 | case $LONG_RUNNING_IGNORE_LIST in |
16 | *" $1 "*) ;; | |
17 | *) __wakey_start=$EPOCHREALTIME __wakey_cmd=$1 ;; | |
18 | esac | |
9778630e MW |
19 | ;; |
20 | esac | |
21 | } | |
22 | ||
23 | __wakey_precmd () { | |
24 | typeset icon head rc=$? cmd | |
25 | typeset -F now=$EPOCHREALTIME | |
26 | ||
27 | case $__wakey_start in | |
28 | nil) ;; | |
29 | *) | |
30 | if (( now - __wakey_start >= LONG_RUNNING_COMMAND_TIMEOUT )); then | |
31 | case $rc in | |
32 | 0) icon=trophy-gold head="Command completed" ;; | |
33 | *) icon=dialog-warning head="Command FAILED (rc = $rc)" ;; | |
34 | esac | |
35 | cmd=${__wakey_cmd//&/&}; cmd=${cmd//</<}; cmd=${cmd//>/>} | |
36 | notify-send -c Wakey -i $icon -t 5000 $head $cmd | |
37 | fi | |
38 | __wakey_start=nil | |
39 | ;; | |
40 | esac | |
41 | } | |
42 | ||
43 | preexec_functions+=(__wakey_preexec) | |
44 | precmd_functions+=(__wakey_precmd) |