1 functions rbenv_prompt_info >& /dev/null || rbenv_prompt_info(){}
3 function theme_precmd {
5 (( TERMWIDTH = ${COLUMNS} - 1 ))
9 # Truncate the path if it's too long.
14 local promptsize=${#${(%):---(%n@%m:%l)---()--}}
15 local rubyprompt=`rvm_prompt_info || rbenv_prompt_info`
16 local rubypromptsize=${#${rubyprompt}}
17 local pwdsize=${#${(%):-%~}}
19 if [[ "$promptsize + $rubypromptsize + $pwdsize" -gt $TERMWIDTH ]]; then
20 ((PR_PWDLEN=$TERMWIDTH - $promptsize))
22 PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $rubypromptsize + $pwdsize)))..${PR_HBAR}.)}"
30 if [[ "$TERM" == "screen" ]]; then
31 local CMD=${1[(wr)^(*=*|sudo|-*)]}
39 # Need this so the prompt will work.
45 # See if we can use colors.
47 autoload colors zsh/terminfo
48 if [[ "$terminfo[colors]" -ge 8 ]]; then
51 for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GREY; do
52 eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
53 eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
54 (( count = $count + 1 ))
56 PR_NO_COLOUR="%{$terminfo[sgr0]%}"
60 ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[green]%}"
61 ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
62 ZSH_THEME_GIT_PROMPT_DIRTY=""
63 ZSH_THEME_GIT_PROMPT_CLEAN=""
65 ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} ✚"
66 ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} ✹"
67 ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} ✖"
68 ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜"
69 ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} ═"
70 ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭"
73 # See if we can use extended characters to look nicer.
76 set -A altchar ${(s..)terminfo[acsc]}
77 PR_SET_CHARSET="%{$terminfo[enacs]%}"
78 PR_SHIFT_IN="%{$terminfo[smacs]%}"
79 PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
80 PR_HBAR=${altchar[q]:--}
81 PR_ULCORNER=${altchar[l]:--}
82 PR_LLCORNER=${altchar[m]:--}
83 PR_LRCORNER=${altchar[j]:--}
84 PR_URCORNER=${altchar[k]:--}
88 # Decide if we need to set titlebar text.
92 PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}'
95 PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
104 # Decide whether to set a screen title
105 if [[ "$TERM" == "screen" ]]; then
106 PR_STITLE=$'%{\ekzsh\e\\%}'
113 # Finally, the prompt.
115 PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
116 $PR_CYAN$PR_SHIFT_IN$PR_ULCORNER$PR_HBAR$PR_SHIFT_OUT$PR_GREY(\
117 $PR_GREEN%$PR_PWDLEN<...<%~%<<\
118 $PR_GREY)`rvm_prompt_info || rbenv_prompt_info`$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_HBAR${(e)PR_FILLBAR}$PR_HBAR$PR_SHIFT_OUT$PR_GREY(\
119 $PR_CYAN%(!.%SROOT%s.%n)$PR_GREY@$PR_GREEN%m:%l\
120 $PR_GREY)$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_URCORNER$PR_SHIFT_OUT\
122 $PR_CYAN$PR_SHIFT_IN$PR_LLCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
123 $PR_YELLOW%D{%H:%M:%S}\
124 $PR_LIGHT_BLUE%{$reset_color%}`git_prompt_info``git_prompt_status`$PR_BLUE)$PR_CYAN$PR_SHIFT_IN$PR_HBAR\
125 $PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
128 # display exitcode on the right when >0
129 return_code="%(?..%{$fg[red]%}%? ↵ %{$reset_color%})"
130 RPROMPT=' $return_code$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_BLUE$PR_HBAR$PR_SHIFT_OUT\
131 ($PR_YELLOW%D{%a,%b%d}$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_LRCORNER$PR_SHIFT_OUT$PR_NO_COLOUR'
133 PS2='$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
134 $PR_BLUE$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\
135 $PR_LIGHT_GREEN%_$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
136 $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR '
141 autoload -U add-zsh-hook
142 add-zsh-hook precmd theme_precmd
143 add-zsh-hook preexec theme_preexec