prezto/modules/prompt/functions/prompt_epiloque_setup
2014-07-14 02:06:57 +04:00

118 lines
3.8 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 "$@"