bug: Use en_US when fetching EPOCHREALTIME
Isolates fetching of EPOCHREALTIME to a function which sets LC_ALL=en_US.UTF-8. This ensures that the value is in decimal format, regardless of runtime locale. bug: Hide duration when no command executedpull/2172/head
parent
1c9cfd056b
commit
7c7e4f90ec
|
|
@ -2,12 +2,24 @@
|
|||
#
|
||||
# Functions for measuring and reporting how long a command takes to run.
|
||||
|
||||
: "${COMMAND_DURATION_START_SECONDS:=${EPOCHREALTIME:-$SECONDS}}"
|
||||
# Get shell duration in decimal format regardless of runtime locale.
|
||||
# Notice: This function runs as a sub-shell - notice '(' vs '{'.
|
||||
function _shell_duration_en() (
|
||||
# DFARREL You would think LC_NUMERIC would do it, but not working in my local
|
||||
LC_ALL='en_US.UTF-8'
|
||||
printf "%s" "${EPOCHREALTIME:-$SECONDS}"
|
||||
)
|
||||
|
||||
: "${COMMAND_DURATION_START_SECONDS:=$(_shell_duration_en)}"
|
||||
: "${COMMAND_DURATION_ICON:=🕘}"
|
||||
: "${COMMAND_DURATION_MIN_SECONDS:=1}"
|
||||
|
||||
function _command_duration_pre_exec() {
|
||||
COMMAND_DURATION_START_SECONDS="${EPOCHREALTIME:-$SECONDS}"
|
||||
COMMAND_DURATION_START_SECONDS="$(_shell_duration_en)"
|
||||
}
|
||||
|
||||
function _command_duration_pre_cmd() {
|
||||
COMMAND_DURATION_START_SECONDS=""
|
||||
}
|
||||
|
||||
function _dynamic_clock_icon {
|
||||
|
|
@ -20,13 +32,15 @@ function _dynamic_clock_icon {
|
|||
|
||||
function _command_duration() {
|
||||
[[ -n "${BASH_IT_COMMAND_DURATION:-}" ]] || return
|
||||
[[ -n "${COMMAND_DURATION_START_SECONDS:-}" ]] || return
|
||||
|
||||
local command_duration=0 command_start="${COMMAND_DURATION_START_SECONDS:-0}"
|
||||
local -i minutes=0 seconds=0 deciseconds=0
|
||||
local -i command_start_seconds="${command_start%.*}"
|
||||
local -i command_start_deciseconds=$((10#${command_start##*.}))
|
||||
command_start_deciseconds="${command_start_deciseconds:0:1}"
|
||||
local current_time="${EPOCHREALTIME:-$SECONDS}"
|
||||
local current_time
|
||||
current_time="$(_shell_duration_en)"
|
||||
local -i current_time_seconds="${current_time%.*}"
|
||||
local -i current_time_deciseconds="$((10#${current_time##*.}))"
|
||||
current_time_deciseconds="${current_time_deciseconds:0:1}"
|
||||
|
|
@ -59,3 +73,4 @@ function _command_duration() {
|
|||
}
|
||||
|
||||
_bash_it_library_finalize_hook+=("safe_append_preexec '_command_duration_pre_exec'")
|
||||
_bash_it_library_finalize_hook+=("safe_append_prompt_command '_command_duration_pre_cmd'")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ about-plugin 'Alert (BEL) when process ends after a threshold of seconds'
|
|||
|
||||
function precmd_return_notification() {
|
||||
local command_start="${COMMAND_DURATION_START_SECONDS:=0}"
|
||||
local current_time="${EPOCHREALTIME:-$SECONDS}"
|
||||
local current_time
|
||||
current_time="$(_shell_duration_en)"
|
||||
local -i command_duration="$((${current_time%.*} - ${command_start%.*}))"
|
||||
if [[ "${command_duration}" -gt "${NOTIFY_IF_COMMAND_RETURNS_AFTER:-5}" ]]; then
|
||||
printf '\a'
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ function local_setup_file() {
|
|||
|
||||
@test "plugins cmd-returned-notify: notify after elapsed time" {
|
||||
export NOTIFY_IF_COMMAND_RETURNS_AFTER=0
|
||||
export COMMAND_DURATION_START_SECONDS="${EPOCHREALTIME:-$SECONDS}"
|
||||
export COMMAND_DURATION_START_SECONDS="$(_shell_duration_en)"
|
||||
sleep 1
|
||||
run precmd_return_notification
|
||||
assert_success
|
||||
|
|
@ -18,7 +18,7 @@ function local_setup_file() {
|
|||
|
||||
@test "plugins cmd-returned-notify: do not notify before elapsed time" {
|
||||
export NOTIFY_IF_COMMAND_RETURNS_AFTER=10
|
||||
export COMMAND_DURATION_START_SECONDS="${EPOCHREALTIME:-$SECONDS}"
|
||||
export COMMAND_DURATION_START_SECONDS="$(_shell_duration_en)"
|
||||
sleep 1
|
||||
run precmd_return_notification
|
||||
assert_success
|
||||
|
|
@ -34,7 +34,7 @@ function local_setup_file() {
|
|||
@test "lib command_duration: preexec set COMMAND_DURATION_START_SECONDS" {
|
||||
export COMMAND_DURATION_START_SECONDS=
|
||||
assert_equal "${COMMAND_DURATION_START_SECONDS}" ""
|
||||
NOW="${EPOCHREALTIME:-$SECONDS}"
|
||||
NOW="$(_shell_duration_en)"
|
||||
_command_duration_pre_exec
|
||||
# We need to make sure to account for nanoseconds...
|
||||
assert_equal "${COMMAND_DURATION_START_SECONDS%.*}" "${NOW%.*}"
|
||||
|
|
|
|||
Loading…
Reference in New Issue