-
Notifications
You must be signed in to change notification settings - Fork 1
/
tarcadia.zsh-theme
131 lines (112 loc) · 3.72 KB
/
tarcadia.zsh-theme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
function theme_precmd {
local TERMWIDTH=$(( COLUMNS - ${ZLE_RPROMPT_INDENT:-1} ))
PR_FILLBAR=""
PR_PWDLEN=""
local promptsize=${#${(%):---[%D{%a','%b%d' '%H:%M}]--[%n@%m]--}}
local pwdsize=${#${(%):-%~}}
# Truncate the path if it's too long.
if (( pwdsize > TERMWIDTH - 60 )); then
(( PR_PWDLEN = TERMWIDTH - 60 ))
fi
# Prompt first line length
if [[ "${langinfo[CODESET]}" = UTF-8 ]]; then
PR_FILLBAR="\${(l:$(( TERMWIDTH - promptsize ))::${PR_HBAR}:)}"
else
PR_FILLBAR="${PR_SHIFT_IN}\${(l:$(( TERMWIDTH - promptsize ))::${altchar[q]:--}:)}${PR_SHIFT_OUT}"
fi
}
function theme_preexec {
setopt local_options extended_glob
if [[ "$TERM" = "screen" ]]; then
local CMD=${1[(wr)^(*=*|sudo|-*)]}
echo -n "\ek$CMD\e\\"
fi
}
autoload -U add-zsh-hook
add-zsh-hook precmd theme_precmd
add-zsh-hook preexec theme_preexec
# Set the prompt
# Need this so the prompt will work.
setopt prompt_subst
# See if we can use colors.
autoload zsh/terminfo
for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GREY; do
typeset -g PR_$color="%{$terminfo[bold]$fg[${(L)color}]%}"
typeset -g PR_LIGHT_$color="%{$fg[${(L)color}]%}"
done
PR_NO_COLOUR="%{$terminfo[sgr0]%}"
# Modify Git prompt
ZSH_THEME_GIT_PROMPT_PREFIX=" : %{$terminfo[bold]$fg[cyan]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY=""
ZSH_THEME_GIT_PROMPT_CLEAN=""
ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} %{%G✚%}"
ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} %{%G✹%}"
ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} %{%G✖%}"
ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} %{%G➜%}"
ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} %{%G═%}"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} %{%G✭%}"
# Use extended characters to look nicer if supported.
if [[ "${langinfo[CODESET]}" = UTF-8 ]]; then
PR_SET_CHARSET=""
PR_HBAR="─"
PR_ULCORNER="┌"
PR_LLCORNER="└"
PR_LRCORNER="┘"
PR_URCORNER="┐"
else
typeset -g -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
# Decide if we need to set titlebar text.
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
# Decide whether to set a screen title
if [[ "$TERM" = "screen" ]]; then
PR_STITLE=$'%{\ekzsh\e\\%}'
else
PR_STITLE=""
fi
# Finally, the prompt.
PROMPT='${PR_SET_CHARSET}${PR_STITLE}${(e)PR_TITLEBAR}\
${PR_GREY}${PR_ULCORNER}${PR_HBAR}[\
${PR_YELLOW}%D{%a,%b%d %H:%M}\
${PR_GREY}]${PR_HBAR}\
${PR_GREY}${(e)PR_FILLBAR}\
${PR_GREY}${PR_HBAR}[\
${PR_CYAN}%(!.%SROOT%s.%n)${PR_GREY}@${PR_GREEN}%m\
${PR_GREY}]${PR_HBAR}${PR_URCORNER}\
${PR_GREY}${PR_LLCORNER}${PR_HBAR}[\
${PR_GREEN}%${PR_PWDLEN}<...<%~%<<\
${PR_GREY} ${PR_HBAR}${PR_HBAR}\
${PR_NO_COLOUR} ${PR_MAGENTA}:${PR_RED}:${PR_YELLOW}:${PR_GREEN}:${PR_CYAN}:${PR_BLUE}:\
${PR_NO_COLOUR} '
# display exitcode on the right when > 0
return_code="%(?..%{$fg[red]%}%? ↵ %{$reset_color%})"
RPROMPT=' $return_code\
${PR_GREY}$(git_prompt_info)$(git_prompt_status)\
${PR_GREY} :%l\
${PR_GREY}]${PR_HBAR}${PR_LRCORNER}\
${PR_NO_COLOUR}'
PS2='${PR_GREY}${PR_HBAR}${PR_HBAR}:\
${PR_LIGHT_GREEN}%_$\
{PR_GREY}:${PR_HBAR}:\
${PR_NO_COLOUR} '