Skip to content

Instantly share code, notes, and snippets.

@dmitryrck
Created July 26, 2012 18:13
Show Gist options
  • Save dmitryrck/3183594 to your computer and use it in GitHub Desktop.
Save dmitryrck/3183594 to your computer and use it in GitHub Desktop.
# Vi configuration from: https://github.com/skwp/dotfiles/blob/master/oh-my-zsh/themes/kylewest.zsh-theme
function zle-line-init zle-keymap-select {
zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select
bindkey -v
ZSH_THEME_VI_MODE_COMMAND="%{$fg_bold[magenta]%}<#%{$reset_color%}"
ZSH_THEME_VI_MODE_INSERT="%{$fg_bold[green]%}$>%{$reset_color%}"
vi_mode_prompt_info () {
if [[ ${KEYMAP} = 'vicmd' ]]
then
echo $ZSH_THEME_VI_MODE_COMMAND
else
echo $ZSH_THEME_VI_MODE_INSERT
fi
}
function update_current_git_vars() {
unset __CURRENT_GIT_BRANCH
unset __CURRENT_GIT_BRANCH_STATUS
unset __CURRENT_GIT_BRANCH_AHEAD
unset __CURRENT_GIT_BRANCH_IS_DIRTY
local st="$(git status 2>/dev/null)"
if [ -n "$st" ]; then
local -a arr
arr=(${(f)st})
if echo $arr[1] | grep "Not currently on any branch." >/dev/null; then
__CURRENT_GIT_BRANCH='no-branch'
else
__CURRENT_GIT_BRANCH="$(echo $arr[1] | awk ' { print $4 } ')"
fi
if echo $arr[2] | grep "Your branch is" >/dev/null; then
if echo $arr[2] | grep "ahead" >/dev/null; then
__CURRENT_GIT_BRANCH_STATUS='ahead'
__CURRENT_GIT_BRANCH_AHEAD=$(echo $st | grep 'ahead' | cut -d' ' -f9)
elif echo $arr[2] | grep "diverged" >/dev/null; then
__CURRENT_GIT_BRANCH_STATUS='diverged'
else
__CURRENT_GIT_BRANCH_STATUS='behind'
fi
fi
if echo $st | grep "nothing to commit (working directory clean)" >/dev/null; then
else
__CURRENT_GIT_BRANCH_IS_DIRTY='1'
fi
fi
}
function prompt_git_info() {
update_current_git_vars
if [ -n "$__CURRENT_GIT_BRANCH" ]; then
local s="${ZSH_THEME_GIT_PROMPT_PREFIX}"
s+="$__CURRENT_GIT_BRANCH"
if [ -n "$__CURRENT_GIT_BRANCH_IS_DIRTY" ]; then
s+="${ZSH_THEME_GIT_PROMPT_DIRTY}"
fi
case "$__CURRENT_GIT_BRANCH_STATUS" in
ahead) s+="${ZSH_THEME_GIT_AHEAD}${__CURRENT_GIT_BRANCH_AHEAD}" ;;
diverged) s+="${ZSH_THEME_GIT_DIVERGED}" ;;
behind) s+="${ZSH_THEME_BEHIND}" ;;
esac
s+="${ZSH_THEME_GIT_PROMPT_SUFFIX}"
echo ${s}
fi
}
function chpwd_update_git_vars() {
update_current_git_vars
}
function precmd_update_git_vars() {
if [ -n "$__EXECUTED_GIT_COMMAND" ]; then
update_current_git_vars
unset __EXECUTED_GIT_COMMAND
fi
}
function preexec_update_git_vars() {
case "$1" in
g*|git*|gb*|gc*|vi*|rm*) __EXECUTED_GIT_COMMAND=1 ;;
esac
}
function rvm_rprompt() {
if [[ -d ~/.rvm/ ]]; then
rvm-prompt v g s | sed 's/system//g'
fi
}
ZSH_THEME_VI_MODE_COMMAND=":"
ZSH_THEME_VI_MODE_INSERT="%#"
ZSH_THEME_GIT_PROMPT_PREFIX=" ["
ZSH_THEME_GIT_PROMPT_SUFFIX="] "
ZSH_THEME_GIT_PROMPT_DIRTY="⚡"
ZSH_THEME_GIT_AHEAD="↑"
ZSH_THEME_GIT_DIVERGED="↕"
ZSH_THEME_BEHIND="↓"
PROMPT=$'%1c%B$(prompt_git_info)%b$(vi_mode_prompt_info) '
RPROMPT='%B$(rvm_rprompt)%b'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment