jonathan.zsh-theme 4.05 KB
Newer Older
1
2
functions rbenv_prompt_info >& /dev/null || rbenv_prompt_info(){}

3
function theme_precmd {
Jonathan Tron's avatar
Jonathan Tron committed
4
5
6
7
8
9
    local TERMWIDTH
    (( TERMWIDTH = ${COLUMNS} - 1 ))


    ###
    # Truncate the path if it's too long.
10

Jonathan Tron's avatar
Jonathan Tron committed
11
12
    PR_FILLBAR=""
    PR_PWDLEN=""
13

Jonathan Tron's avatar
Jonathan Tron committed
14
    local promptsize=${#${(%):---(%n@%m:%l)---()--}}
15
    local rubyprompt=`rvm_prompt_info || rbenv_prompt_info`
Jonathan Tron's avatar
Jonathan Tron committed
16
17
    local rubypromptsize=${#${rubyprompt}}
    local pwdsize=${#${(%):-%~}}
18

Jonathan Tron's avatar
Jonathan Tron committed
19
20
21
22
23
24
25
26
27
28
    if [[ "$promptsize + $rubypromptsize + $pwdsize" -gt $TERMWIDTH ]]; then
      ((PR_PWDLEN=$TERMWIDTH - $promptsize))
    else
      PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $rubypromptsize + $pwdsize)))..${PR_HBAR}.)}"
    fi

}


setopt extended_glob
29
theme_preexec () {
Jonathan Tron's avatar
Jonathan Tron committed
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    if [[ "$TERM" == "screen" ]]; then
	local CMD=${1[(wr)^(*=*|sudo|-*)]}
	echo -n "\ek$CMD\e\\"
    fi
}


setprompt () {
    ###
    # Need this so the prompt will work.

    setopt prompt_subst


    ###
    # See if we can use colors.

47
    autoload zsh/terminfo
Jonathan Tron's avatar
Jonathan Tron committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GREY; do
	eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
	eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
	(( count = $count + 1 ))
    done
    PR_NO_COLOUR="%{$terminfo[sgr0]%}"

    ###
    # Modify Git prompt
    ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[green]%}"
    ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
    ZSH_THEME_GIT_PROMPT_DIRTY=""
    ZSH_THEME_GIT_PROMPT_CLEAN=""

    ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} ✚"
    ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} ✹"
    ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} ✖"
    ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜"
    ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} ═"
    ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭"

    ###
    # See if we can use extended characters to look nicer.
Vincent's avatar
Vincent committed
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
    # UTF-8 Fixed

    if [[ $(locale charmap) == "UTF-8" ]]; then
	PR_SET_CHARSET=""
	PR_SHIFT_IN=""
	PR_SHIFT_OUT=""
	PR_HBAR="─"
        PR_ULCORNER="┌"
        PR_LLCORNER="└"
        PR_LRCORNER="┘"
        PR_URCORNER="┐"
    else
        typeset -A altchar
        set -A altchar ${(s..)terminfo[acsc]}
        # Some stuff to help us draw nice lines
        PR_SET_CHARSET="%{$terminfo[enacs]%}"
        PR_SHIFT_IN="%{$terminfo[smacs]%}"
        PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
        PR_HBAR='$PR_SHIFT_IN${altchar[q]:--}$PR_SHIFT_OUT'
        PR_ULCORNER='$PR_SHIFT_IN${altchar[l]:--}$PR_SHIFT_OUT'
        PR_LLCORNER='$PR_SHIFT_IN${altchar[m]:--}$PR_SHIFT_OUT'
        PR_LRCORNER='$PR_SHIFT_IN${altchar[j]:--}$PR_SHIFT_OUT'
        PR_URCORNER='$PR_SHIFT_IN${altchar[k]:--}$PR_SHIFT_OUT'
     fi
Jonathan Tron's avatar
Jonathan Tron committed
95

96

Jonathan Tron's avatar
Jonathan Tron committed
97
98
    ###
    # Decide if we need to set titlebar text.
99

Jonathan Tron's avatar
Jonathan Tron committed
100
101
102
103
104
105
106
107
108
109
110
    case $TERM in
	xterm*)
	    PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}'
	    ;;
	screen)
	    PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
	    ;;
	*)
	    PR_TITLEBAR=''
	    ;;
    esac
111
112


Jonathan Tron's avatar
Jonathan Tron committed
113
114
115
116
117
118
119
    ###
    # Decide whether to set a screen title
    if [[ "$TERM" == "screen" ]]; then
	PR_STITLE=$'%{\ekzsh\e\\%}'
    else
	PR_STITLE=''
    fi
120
121


Jonathan Tron's avatar
Jonathan Tron committed
122
123
124
125
    ###
    # Finally, the prompt.

    PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
Vincent's avatar
Vincent committed
126
$PR_CYAN$PR_ULCORNER$PR_HBAR$PR_GREY(\
Jonathan Tron's avatar
Jonathan Tron committed
127
$PR_GREEN%$PR_PWDLEN<...<%~%<<\
Vincent's avatar
Vincent committed
128
$PR_GREY)`rvm_prompt_info || rbenv_prompt_info`$PR_CYAN$PR_HBAR$PR_HBAR${(e)PR_FILLBAR}$PR_HBAR$PR_GREY(\
Jonathan Tron's avatar
Jonathan Tron committed
129
$PR_CYAN%(!.%SROOT%s.%n)$PR_GREY@$PR_GREEN%m:%l\
Vincent's avatar
Vincent committed
130
$PR_GREY)$PR_CYAN$PR_HBAR$PR_URCORNER\
Jonathan Tron's avatar
Jonathan Tron committed
131

Vincent's avatar
Vincent committed
132
$PR_CYAN$PR_LLCORNER$PR_BLUE$PR_HBAR(\
Jonathan Tron's avatar
Jonathan Tron committed
133
$PR_YELLOW%D{%H:%M:%S}\
Vincent's avatar
Vincent committed
134
135
$PR_LIGHT_BLUE%{$reset_color%}`git_prompt_info``git_prompt_status`$PR_BLUE)$PR_CYAN$PR_HBAR\
$PR_HBAR\
Jonathan Tron's avatar
Jonathan Tron committed
136
137
138
139
>$PR_NO_COLOUR '

    # display exitcode on the right when >0
    return_code="%(?..%{$fg[red]%}%? ↵ %{$reset_color%})"
Vincent's avatar
Vincent committed
140
141
    RPROMPT=' $return_code$PR_CYAN$PR_HBAR$PR_BLUE$PR_HBAR\
($PR_YELLOW%D{%a,%b%d}$PR_BLUE)$PR_HBAR$PR_CYAN$PR_LRCORNER$PR_NO_COLOUR'
Jonathan Tron's avatar
Jonathan Tron committed
142

Vincent's avatar
Vincent committed
143
144
145
146
    PS2='$PR_CYAN$PR_HBAR\
$PR_BLUE$PR_HBAR(\
$PR_LIGHT_GREEN%_$PR_BLUE)$PR_HBAR\
$PR_CYAN$PR_HBAR$PR_NO_COLOUR '
Jonathan Tron's avatar
Jonathan Tron committed
147
148
149
}

setprompt
150
151
152

autoload -U add-zsh-hook
add-zsh-hook precmd  theme_precmd
Vincent's avatar
Vincent committed
153
add-zsh-hook preexec theme_preexec