70 lines
1.6 KiB
Bash
70 lines
1.6 KiB
Bash
|
RED=$(tput setaf 1)
|
|||
|
GREEN=$(tput setaf 2)
|
|||
|
YELLOW=$(tput setaf 3)
|
|||
|
BLUE=$(tput setaf 4)
|
|||
|
MAGENTA=$(tput setaf 5)
|
|||
|
ITALIC=$(tput sitm)
|
|||
|
RESET=$(tput sgr0)
|
|||
|
|
|||
|
format_command_time() {
|
|||
|
local x="$1"
|
|||
|
local ms="$((x % 1000))"
|
|||
|
x="$((x / 1000))"
|
|||
|
local sec="$((x % 60))"
|
|||
|
x="$((x / 60))"
|
|||
|
local min="$((x % 60))"
|
|||
|
x="$((x / 60))"
|
|||
|
local hour="$((x % 24))"
|
|||
|
local day="$((x / 24))"
|
|||
|
local timestr
|
|||
|
if [ "$day" -gt 0 ]; then
|
|||
|
timestr="${day}d "
|
|||
|
fi
|
|||
|
if [ "$hour" -gt 0 ]; then
|
|||
|
timestr="$timestr${hour}h "
|
|||
|
fi
|
|||
|
if [ "$min" -gt 0 ]; then
|
|||
|
timestr="$timestr${min}m "
|
|||
|
fi
|
|||
|
if [ "$sec" -gt 0 ]; then
|
|||
|
timestr="$timestr${sec}s "
|
|||
|
fi
|
|||
|
timestr="$timestr${ms}ms"
|
|||
|
printf '%s' "$timestr"
|
|||
|
}
|
|||
|
|
|||
|
last_command_timer() {
|
|||
|
last_command_start=${last_command_start:-$(date +%s%3N)}
|
|||
|
}
|
|||
|
|
|||
|
set_prompt() {
|
|||
|
if [ $? -eq 0 ]; then
|
|||
|
prompt_color="$GREEN"
|
|||
|
else
|
|||
|
prompt_color="$RED"
|
|||
|
fi
|
|||
|
if [ -n "$last_command_start" ]; then
|
|||
|
last_command_length=$(format_command_time "$(($(date +%s%3N) - last_command_start))")
|
|||
|
unset last_command_start
|
|||
|
last_command_stats="$ITALIC${MAGENTA}Completed in $last_command_length.$RESET\n"
|
|||
|
else
|
|||
|
last_command_stats=
|
|||
|
fi
|
|||
|
git_branch=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
|
|||
|
if [ -n "$git_branch" ]; then
|
|||
|
local git_status
|
|||
|
git_status=$(git status --porcelain)
|
|||
|
if [ -n "$git_status" ]; then
|
|||
|
git_symbol=" $RED "
|
|||
|
else
|
|||
|
git_symbol=" $GREEN "
|
|||
|
fi
|
|||
|
else
|
|||
|
git_symbol=
|
|||
|
fi
|
|||
|
PS1="\n$last_command_stats\[$BLUE\]\w\[$RESET\]$git_symbol\[$YELLOW\]$git_branch\[$RESET\]\n\[$prompt_color\]❯\[$RESET\] "
|
|||
|
}
|
|||
|
|
|||
|
trap 'last_command_timer' DEBUG
|
|||
|
PROMPT_COMMAND=set_prompt
|