add command time duration plugin (#1683)
This commit is contained in:
1
themes/barbuk/README.rst
Symbolic link
1
themes/barbuk/README.rst
Symbolic link
@@ -0,0 +1 @@
|
||||
../../docs/themes-list/barbuk.rst
|
||||
@@ -11,6 +11,11 @@ SCM_HG_CHAR=${BARBUK_HG_CHAR:='☿ '}
|
||||
SCM_SVN_CHAR=${BARBUK_SVN_CHAR:='⑆ '}
|
||||
EXIT_CODE_ICON=${BARBUK_EXIT_CODE_ICON:=' '}
|
||||
PYTHON_VENV_CHAR=${BARBUK_PYTHON_VENV_CHAR:=' '}
|
||||
COMMAND_DURATION_ICON=${BARBUK_COMMAND_DURATION_ICON:-"$bold_blue "}
|
||||
|
||||
# Command duration
|
||||
COMMAND_DURATION_MIN_SECONDS=${COMMAND_DURATION_MIN_SECONDS:-1}
|
||||
COMMAND_DURATION_COLOR="$normal"
|
||||
|
||||
# Ssh user and hostname display
|
||||
SSH_INFO=${BARBUK_SSH_INFO:=true}
|
||||
@@ -67,7 +72,9 @@ function _exit-code {
|
||||
}
|
||||
|
||||
function _prompt {
|
||||
local exit_code="$?" wrap_char=' ' dir_color=$green ssh_info='' python_venv='' host
|
||||
local exit_code="$?" wrap_char=' ' dir_color=$green ssh_info='' python_venv='' host command_duration=
|
||||
|
||||
command_duration=$(_command_duration)
|
||||
|
||||
_exit-code exit_code
|
||||
_git-uptream-remote-logo
|
||||
@@ -96,9 +103,8 @@ function _prompt {
|
||||
python_venv="$PYTHON_VENV_CHAR$(basename "${VIRTUAL_ENV}") "
|
||||
fi
|
||||
|
||||
PS1="\\n${ssh_info} ${purple}$(scm_char)${python_venv}${dir_color}\\w${normal}$(scm_prompt_info)${exit_code}"
|
||||
|
||||
[[ ${#PS1} -gt $((COLUMNS*3)) ]] && wrap_char="\\n"
|
||||
PS1="\\n${ssh_info} ${purple}$(scm_char)${python_venv}${dir_color}\\w${normal}$(scm_prompt_info)${command_duration}${exit_code}"
|
||||
[[ ${#PS1} -gt $((COLUMNS*2)) ]] && wrap_char="\\n"
|
||||
PS1="${PS1}${wrap_char}❯${normal} "
|
||||
}
|
||||
|
||||
|
||||
73
themes/command_duration.theme.bash
Normal file
73
themes/command_duration.theme.bash
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ -z "$BASH_IT_COMMAND_DURATION" ] || [ "$BASH_IT_COMMAND_DURATION" != true ]; then
|
||||
_command_duration() {
|
||||
echo -n
|
||||
}
|
||||
return
|
||||
fi
|
||||
|
||||
# Define tmp dir and file
|
||||
COMMAND_DURATION_TMPDIR="${TMPDIR:-/tmp}"
|
||||
COMMAND_DURATION_FILE="${COMMAND_DURATION_FILE:-$COMMAND_DURATION_TMPDIR/bashit_theme_execution_$BASHPID}"
|
||||
|
||||
COMMAND_DURATION_ICON=${COMMAND_DURATION_ICON:-' '}
|
||||
COMMAND_DURATION_MIN_SECONDS=${COMMAND_DURATION_MIN_SECONDS:-'1'}
|
||||
|
||||
trap _command_duration_delete_temp_file EXIT HUP INT TERM
|
||||
|
||||
_command_duration_delete_temp_file() {
|
||||
if [[ -f "$COMMAND_DURATION_FILE" ]]; then
|
||||
rm -f "$COMMAND_DURATION_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
_command_duration_pre_exec() {
|
||||
date +%s.%1N > "$COMMAND_DURATION_FILE"
|
||||
}
|
||||
|
||||
_command_duration() {
|
||||
local command_duration command_start current_time
|
||||
local minutes seconds deciseconds
|
||||
local command_start_sseconds current_time_seconds command_start_deciseconds current_time_deciseconds
|
||||
current_time=$(date +%s.%1N)
|
||||
|
||||
if [[ -f "$COMMAND_DURATION_FILE" ]]; then
|
||||
command_start=$(< "$COMMAND_DURATION_FILE")
|
||||
command_start_sseconds=${command_start%.*}
|
||||
current_time_seconds=${current_time%.*}
|
||||
|
||||
command_start_deciseconds=$((10#${command_start#*.}))
|
||||
current_time_deciseconds=$((10#${current_time#*.}))
|
||||
|
||||
# seconds
|
||||
command_duration=$(( current_time_seconds - command_start_sseconds ))
|
||||
|
||||
if (( current_time_deciseconds >= command_start_deciseconds )); then
|
||||
deciseconds=$(( (current_time_deciseconds - command_start_deciseconds) ))
|
||||
else
|
||||
((command_duration-=1))
|
||||
deciseconds=$(( 10 - ( (command_start_deciseconds - current_time_deciseconds) ) ))
|
||||
fi
|
||||
command rm "$COMMAND_DURATION_FILE"
|
||||
else
|
||||
command_duration=0
|
||||
fi
|
||||
|
||||
if (( command_duration > 0 )); then
|
||||
minutes=$(( command_duration / 60 ))
|
||||
seconds=$(( command_duration % 60 ))
|
||||
fi
|
||||
|
||||
if (( minutes > 0 )); then
|
||||
printf "%s%s%dm %ds" "$COMMAND_DURATION_ICON" "$COMMAND_DURATION_COLOR" "$minutes" "$seconds"
|
||||
elif (( seconds >= COMMAND_DURATION_MIN_SECONDS )); then
|
||||
printf "%s%s%d.%01ds" "$COMMAND_DURATION_ICON" "$COMMAND_DURATION_COLOR" "$seconds" "$deciseconds"
|
||||
fi
|
||||
}
|
||||
|
||||
preexec() (
|
||||
_command_duration_pre_exec
|
||||
)
|
||||
|
||||
preexec_install
|
||||
Reference in New Issue
Block a user