blob: 285b9e4d99ced4e8ca9c823d3095f7346458a97f (
plain) (
blame)
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
|
# zsh prompt themes extension
#
# Load with `autoload -U promptinit; promptinit'.
prompt_themes=()
typeset -gU prompt_themes
typeset -g prompt_theme
promptinit () {
emulate -L zsh
setopt extendedglob
local ppath='' name
# Autoload all prompt_*_setup functions in fpath
for theme in $^fpath/prompt_*_setup(N); do
if [[ $theme == */prompt_(#b)(*)_setup ]]; then
name="$match[1]"
if [[ -r "$theme" ]]; then
prompt_themes=($name $prompt_themes)
autoload -U prompt_${name}_setup
else
print "Couldn't find theme $theme"
fi
else
print "eh?"
fi
done
# Color definitions come in handy
autoload -U colors
colors
# Variables common to all prompt styles
prompt_newline=$(echo -ne "\n%{\r%}")
}
set_prompt() {
emulate -L zsh
local opt preview theme usage old_theme
usage='Usage: prompt <options>
Options:
-l List currently available prompt themes
-p [<themes>] Preview given themes (defaults to all)
-h [<theme>] Display help (for given theme)
-s <theme> Set and save theme
<theme> Switch to new theme immediately (changes not saved)'
getopts "hlps" opt
case "$opt" in
h) if [[ -n "$2" && -n $prompt_themes[(r)$2] ]]; then
if functions prompt_$2_help >/dev/null; then
print "Help for $2 theme:\n"
prompt_$2_help
else
print "No help available for $2 theme"
fi
else
print "$usage"
fi
;;
l) print Currently available prompt themes:
print $prompt_themes
return
;;
p) if (( ! $+prompt_theme )); then
print "Cannot preview; current prompt is non-themeable and would"
print "be destroyed."
return
fi
preview=( $prompt_themes )
[[ -n "$2" && -n $prompt_themes[(r)$2] ]] && preview=( $*[2,-1] )
for theme in $preview; do
[[ $theme == $prompt_theme[1] ]] && continue
print "\nTheme: $theme"
prompt_${theme}_setup
precmd
print -n -P "${PS1}"
preexec
print "command arg1 arg2 ... argn"
done
print
prompt_${prompt_theme}_setup
;;
s) print "Set and save not yet implemented. Please ensure your ~/.zshrc"
print "contains something similar to the following:\n"
print " autoload -U promptinit"
print " promptinit"
print " prompt $*[2,-1]"
;;
*) if [[ -z "$1" || -z $prompt_themes[(r)$1] ]]; then
print "$usage"
return
fi
prompt_$1_setup $*[2,-1]
prompt_theme=( $* )
# Avoid screwing up the environment listing
PSZZZZ=$reset_color
RPSZZZZ=$reset_color
PROMPTZZZZ=$reset_color
RPROMPTZZZZ=$reset_color
promptzzzz=$reset_color
;;
esac
}
prompt () {
local -A prompt_opts
local opt
set_prompt "$@"
# Set prompt options
for opt in ${(k)prompt_opts}; do
if [[ $prompt_opts[$opt] != (|un)set ]]; then
echo "${0##*/}: value of prompt option must be 'set' or 'unset'" >&2
return 1
else
$prompt_opts[$opt]opt prompt$opt
fi
done
}
promptinit "$@"
|