jonathan.zsh-theme 4.11 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
    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.

    autoload colors zsh/terminfo
    if [[ "$terminfo[colors]" -ge 8 ]]; then
	colors
    fi
    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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
    # 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
98

99

Jonathan Tron's avatar
Jonathan Tron committed
100
101
    ###
    # Decide if we need to set titlebar text.
102

Jonathan Tron's avatar
Jonathan Tron committed
103
104
105
106
107
108
109
110
111
112
113
    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
114
115


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


Jonathan Tron's avatar
Jonathan Tron committed
125
126
127
128
    ###
    # Finally, the prompt.

    PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
Vincent's avatar
Vincent committed
129
$PR_CYAN$PR_ULCORNER$PR_HBAR$PR_GREY(\
Jonathan Tron's avatar
Jonathan Tron committed
130
$PR_GREEN%$PR_PWDLEN<...<%~%<<\
Vincent's avatar
Vincent committed
131
$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
132
$PR_CYAN%(!.%SROOT%s.%n)$PR_GREY@$PR_GREEN%m:%l\
Vincent's avatar
Vincent committed
133
$PR_GREY)$PR_CYAN$PR_HBAR$PR_URCORNER\
Jonathan Tron's avatar
Jonathan Tron committed
134

Vincent's avatar
Vincent committed
135
$PR_CYAN$PR_LLCORNER$PR_BLUE$PR_HBAR(\
Jonathan Tron's avatar
Jonathan Tron committed
136
$PR_YELLOW%D{%H:%M:%S}\
Vincent's avatar
Vincent committed
137
138
$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
139
140
141
142
>$PR_NO_COLOUR '

    # display exitcode on the right when >0
    return_code="%(?..%{$fg[red]%}%? ↵ %{$reset_color%})"
Vincent's avatar
Vincent committed
143
144
    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
145

Vincent's avatar
Vincent committed
146
147
148
149
    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
150
151
152
}

setprompt
153
154
155

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