plugin/cmd-returned-notify: Rewrite to match/use lib/command_duration
Use `$EPOCHREALTIME` (or `$SECONDS`) built-in variable provided by Bash instead of `date +%s`. We're only measuing the difference in seconds, so avoid both the binary invocation as well as the subshell. Alsö, Reduce environmental pollution by not exporting every variable, and unsetting when done. Change variable names to match lib/command-duration Remove `preexec_return_notification()` in favor of `lib/command-duration`'s `_command_duration_pre_exec()`. This should now use the same preexec hook and variables as the theme library `command_duration`. tests: handle nanoseconds
This commit is contained in:
@@ -2,15 +2,15 @@
|
||||
cite about-plugin
|
||||
about-plugin 'Alert (BEL) when process ends after a threshold of seconds'
|
||||
|
||||
precmd_return_notification() {
|
||||
export LAST_COMMAND_DURATION=$(($(date +%s) - ${LAST_COMMAND_TIME:=$(date +%s)}))
|
||||
[[ ${LAST_COMMAND_DURATION} -gt ${NOTIFY_IF_COMMAND_RETURNS_AFTER:-5} ]] && echo -e "\a"
|
||||
export LAST_COMMAND_TIME=
|
||||
function precmd_return_notification() {
|
||||
local command_start="${COMMAND_DURATION_START_SECONDS:=0}"
|
||||
local current_time="${EPOCHREALTIME:-$SECONDS}"
|
||||
local -i command_duration="$((${current_time%.*} - ${command_start%.*}))"
|
||||
if [[ "${command_duration}" -gt "${NOTIFY_IF_COMMAND_RETURNS_AFTER:-5}" ]]; then
|
||||
printf '\a'
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
preexec_return_notification() {
|
||||
[[ -z "${LAST_COMMAND_TIME}" ]] && LAST_COMMAND_TIME=$(date +%s)
|
||||
}
|
||||
|
||||
precmd_functions+=(precmd_return_notification)
|
||||
preexec_functions+=(preexec_return_notification)
|
||||
safe_append_prompt_command 'precmd_return_notification'
|
||||
safe_append_preexec '_command_duration_pre_exec'
|
||||
|
||||
Reference in New Issue
Block a user