47 lines
1.5 KiB
Bash
47 lines
1.5 KiB
Bash
|
# In bash this requires https://github.com/rcaloras/bash-preexec
|
||
|
# If sourcing this via ntfy auto-done, it is sourced for you.
|
||
|
|
||
|
# Default to ignoring some well known interactive programs
|
||
|
AUTO_NTFY_DONE_IGNORE=${AUTO_NTFY_DONE_IGNORE:-ntfy emacs htop info less mail man meld most mutt nano screen ssh tail tmux top vi vim watch}
|
||
|
# Bash option example
|
||
|
#AUTO_NTFY_DONE_OPTS='-b default'
|
||
|
# Zsh option example
|
||
|
#AUTO_NTFY_DONE_OPTS=(-b default)
|
||
|
# notify for unfocused only (Used by ntfy internally)
|
||
|
#AUTO_NTFY_DONE_UNFOCUSED_ONLY=-b
|
||
|
# notify for commands runing longer than N sec only (Used by ntfy internally)
|
||
|
#AUTO_NTFY_DONE_LONGER_THAN=-L10
|
||
|
|
||
|
function _ntfy_precmd () {
|
||
|
local ret_value="$?"
|
||
|
[ -n "$ntfy_start_time" ] || return
|
||
|
local duration=$(( $(date +%s) - $ntfy_start_time ))
|
||
|
ntfy_start_time=''
|
||
|
|
||
|
local appname=$(basename "${ntfy_command%% *}")
|
||
|
[[ " $AUTO_NTFY_DONE_IGNORE " == *" $appname "* ]] && return
|
||
|
|
||
|
(ntfy $AUTO_NTFY_DONE_OPTS done \
|
||
|
$AUTO_NTFY_DONE_UNFOCUSED_ONLY $AUTO_NTFY_DONE_LONGER_THAN \
|
||
|
--formatter "$ntfy_command" "$ret_value" "$duration" &)
|
||
|
}
|
||
|
|
||
|
function _ntfy_preexec () {
|
||
|
ntfy_start_time=$(date +%s)
|
||
|
ntfy_command="$1"
|
||
|
}
|
||
|
|
||
|
function _contains_element() {
|
||
|
local e
|
||
|
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
if ! _contains_element _ntfy_preexec "${preexec_functions[@]}"; then
|
||
|
preexec_functions+=(_ntfy_preexec)
|
||
|
fi
|
||
|
|
||
|
if ! _contains_element _ntfy_precmd "${precmd_functions[@]}"; then
|
||
|
precmd_functions+=(_ntfy_precmd)
|
||
|
fi
|