57 lines
1.9 KiB
Bash
57 lines
1.9 KiB
Bash
|
# commands to ignore
|
||
|
cmdignore=(htop tmux top vim nvim testomatic pgcli bat mux tmuxp gc)
|
||
|
|
||
|
# set gt 0 to enable GNU units for time results
|
||
|
gnuunits=0
|
||
|
|
||
|
# end and compare timer, notify-send if needed
|
||
|
function notifyosd-precmd() {
|
||
|
retval=$?
|
||
|
if [[ ${cmdignore[(r)$cmd_basename]} == $cmd_basename ]]; then
|
||
|
return
|
||
|
else
|
||
|
if [ ! -z "$cmd" ]; then
|
||
|
cmd_end=`date +%s`
|
||
|
((cmd_secs=$cmd_end - $cmd_start))
|
||
|
fi
|
||
|
if [ $retval -gt 0 ]; then
|
||
|
cmdstat="with warning"
|
||
|
sndstat="/usr/share/sounds/gnome/default/alerts/sonar.ogg"
|
||
|
urgency="critical"
|
||
|
else
|
||
|
cmdstat="successfully"
|
||
|
sndstat="/usr/share/sounds/gnome/default/alerts/glass.ogg"
|
||
|
urgency="normal"
|
||
|
fi
|
||
|
if [ ! -z "$cmd" -a $cmd_secs -gt 10 ]; then
|
||
|
if [ $gnuunits -gt 0 ]; then
|
||
|
cmd_time=$(units "$cmd_secs seconds" "centuries;years;months;weeks;days;hours;minutes;seconds" | \
|
||
|
sed -e 's/\ +/\,/g' -e s'/\t//')
|
||
|
else
|
||
|
cmd_time=$(printf '%dh:%dm:%ds\n' $(($cmd_secs/3600)) $(($cmd_secs%3600/60)) $(($cmd_secs%60)))
|
||
|
fi
|
||
|
if [ ! -z $SSH_TTY ] ; then
|
||
|
notify-send -i utilities-terminal \
|
||
|
-u $urgency "$cmd_basename on `hostname` completed $cmdstat" "\"$cmd\" took $cmd_time";
|
||
|
else
|
||
|
notify-send -i utilities-terminal \
|
||
|
-u $urgency "$cmd_basename completed $cmdstat" "\"$cmd\" took $cmd_time";
|
||
|
fi
|
||
|
fi
|
||
|
unset cmd
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# make sure this plays nicely with any existing precmd
|
||
|
precmd_functions+=( notifyosd-precmd )
|
||
|
|
||
|
# get command name and start the timer
|
||
|
function notifyosd-preexec() {
|
||
|
cmd=$1
|
||
|
cmd_basename=${${cmd:s/sudo //}[(ws: :)1]}
|
||
|
cmd_start=`date +%s`
|
||
|
}
|
||
|
|
||
|
# make sure this plays nicely with any existing preexec
|
||
|
preexec_functions+=( notifyosd-preexec )
|