1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
prezto/modules/prompt/functions/prompt_epiloque_setup

119 lines
3.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# epiloque by Mark Milstein
# mod of pure by Sindre Sorhus https://github.com/sindresorhus/pure
# MIT License
# For my own and others sanity
# git:
# %b => current branch
# %a => current action (rebase/merge)
# prompt:
# %F => color dict
# %f => reset color
# %~ => current path
# %* => time
# %n => username
# %m => shortname host
# %(?..) => prompt conditional - %(condition.true.false)
# turns seconds into human readable time
# 165392 => 1d 21h 56m 32s
prompt_epiloque_human_time() {
local tmp=$1
local days=$(( tmp / 60 / 60 / 24 ))
local hours=$(( tmp / 60 / 60 % 24 ))
local minutes=$(( tmp / 60 % 60 ))
local seconds=$(( tmp % 60 ))
(( $days > 0 )) && echo -n "${days}d "
(( $hours > 0 )) && echo -n "${hours}h "
(( $minutes > 0 )) && echo -n "${minutes}m "
echo "${seconds}s "
}
# fastest possible way to check if repo is dirty
prompt_epiloque_git_dirty() {
# check if we're in a git repo
command git rev-parse --is-inside-work-tree &>/dev/null || return
# check if it's dirty
command git diff --quiet --ignore-submodules HEAD &>/dev/null
(($? == 1)) && echo '*'
}
# displays the exec time of the last command if set threshold was exceeded
prompt_epiloque_cmd_exec_time() {
local stop=$EPOCHSECONDS
local start=${cmd_timestamp:-$stop}
integer elapsed=$stop-$start
(($elapsed > ${epiloque_CMD_MAX_EXEC_TIME:=5})) && prompt_epiloque_human_time $elapsed
}
prompt_epiloque_preexec() {
cmd_timestamp=$EPOCHSECONDS
# shows the current dir and executed command in the title when a process is active
print -Pn "\e]0;"
echo -nE "$PWD:t: $2"
print -Pn "\a"
}
prompt_epiloque_precmd() {
# git info
vcs_info
local VIRTUAL_ENV_PROMPT_PREFIX="%F{blue}%F{black}"
local VIRTUAL_ENV_PROMPT_SUFFIX="%F{blue} %f"
local PYENV_PROMPT_PREFIX='%F{blue}%F{black}'
local PYENV_PROMPT_SUFFIX="%F{blue} %f"
if which pyenv &> /dev/null
then
local pyenv_version=$(pyenv version | awk '{print $1}')
if [ -n "$pyenv_version" ]; then
local pyenv_prompt="$PYENV_PROMPT_PREFIX$pyenv_version$PYENV_PROMPT_SUFFIX"
fi
fi
if [ -n "$VIRTUAL_ENV" ]; then
if [ -f "$VIRTUAL_ENV/__name__" ]; then
local name=`cat $VIRTUAL_ENV/__name__`
elif [ `basename $VIRTUAL_ENV` = "__" ]; then
local name=$(basename $(dirname $VIRTUAL_ENV))
else
local name=$(basename $VIRTUAL_ENV)
fi
local virtual_env_prompt="$VIRTUAL_ENV_PROMPT_PREFIX$name$VIRTUAL_ENV_PROMPT_SUFFIX"
fi
prompt_epiloque_preprompt="$prompt_epiloque_username%f %F{blue}%~%F{242}$vcs_info_msg_0_`prompt_epiloque_git_dirty` %F{yellow}`prompt_epiloque_cmd_exec_time`%f"
prompt_epiloque_prerprompt="$virtual_env_prompt$pyenv_prompt"
# reset value since `preexec` isn't always triggered
unset cmd_timestamp
}
prompt_epiloque_setup() {
# prevent percentage showing up
# if output doesn't end with a newline
export PROMPT_EOL_MARK=''
prompt_opts=(cr subst percent)
zmodload zsh/datetime
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
add-zsh-hook precmd prompt_epiloque_precmd
add-zsh-hook preexec prompt_epiloque_preexec
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:git*' formats ' %b'
zstyle ':vcs_info:git*' actionformats ' %b|%a'
prompt_epiloque_username='%n@%m'
# prompt turns red if the previous command didn't exit with 0
PROMPT='$prompt_epiloque_preprompt%(?.%F{magenta}.%F{red})¬%f '
RPROMPT='%{${fg[black]}%}$prompt_epiloque_prerprompt%{${reset_color}%}'
}
prompt_epiloque_setup "$@"