Diff
1diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
2index c3fae6efb7f727adce57e42ca140961b76c9950d..30259372cd9f828a9308f3bd4a013afa85c95574 100644
3--- a/oh-my-zsh.sh
4+++ b/oh-my-zsh.sh
5@@ -97,25 +97,12 @@ done
6 unset config_file
7
8 # Load the theme
9-if [[ "$ZSH_THEME" == "random" ]]; then
10- if [[ "${(t)ZSH_THEME_RANDOM_CANDIDATES}" = "array" ]] && [[ "${#ZSH_THEME_RANDOM_CANDIDATES[@]}" -gt 0 ]]; then
11- themes=($ZSH/themes/${^ZSH_THEME_RANDOM_CANDIDATES}.zsh-theme)
12+if [ ! "$ZSH_THEME" = "" ]; then
13+ if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
14+ source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
15+ elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then
16+ source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
17 else
18- themes=($ZSH/themes/*zsh-theme)
19- fi
20- N=${#themes[@]}
21- ((N=(RANDOM%N)+1))
22- RANDOM_THEME=${themes[$N]}
23- source "$RANDOM_THEME"
24- echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
25-else
26- if [ ! "$ZSH_THEME" = "" ]; then
27- if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
28- source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
29- elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then
30- source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
31- else
32- source "$ZSH/themes/$ZSH_THEME.zsh-theme"
33- fi
34+ source "$ZSH/themes/$ZSH_THEME.zsh-theme"
35 fi
36 fi
37diff --git a/plugins/themes/_theme b/plugins/themes/_theme
38deleted file mode 100644
39index 8214ddb0dd14f3e996da7f678140a1c913e45430..0000000000000000000000000000000000000000
40--- a/plugins/themes/_theme
41+++ /dev/null
42@@ -1,3 +0,0 @@
43-#compdef theme
44-
45-_arguments "1: :($(lstheme | tr "\n" " "))"
46diff --git a/plugins/themes/themes.plugin.zsh b/plugins/themes/themes.plugin.zsh
47index 2cd0ee3277006e079bd4c20dc09419976f6150a4..1fbde5b6463565ad2925aad780ac6fbfd25cc18f 100644
48--- a/plugins/themes/themes.plugin.zsh
49+++ b/plugins/themes/themes.plugin.zsh
50@@ -1,26 +1,27 @@
51-function theme
52-{
53- if [ -z "$1" ] || [ "$1" = "random" ]; then
54- themes=($ZSH/themes/*zsh-theme)
55- N=${#themes[@]}
56- ((N=(RANDOM%N)+1))
57- RANDOM_THEME=${themes[$N]}
58- source "$RANDOM_THEME"
59- echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
60+function theme {
61+ : ${1:=random} # Use random theme if none provided
62+
63+ if [[ -f "$ZSH_CUSTOM/$1.zsh-theme" ]]; then
64+ source "$ZSH_CUSTOM/$1.zsh-theme"
65+ elif [[ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ]]; then
66+ source "$ZSH_CUSTOM/themes/$1.zsh-theme"
67+ elif [[ -f "$ZSH/themes/$1.zsh-theme" ]]; then
68+ source "$ZSH/themes/$1.zsh-theme"
69 else
70- if [ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ]
71- then
72- source "$ZSH_CUSTOM/themes/$1.zsh-theme"
73- else
74- source "$ZSH/themes/$1.zsh-theme"
75- fi
76+ echo "$0: Theme '$1' not found"
77+ return 1
78 fi
79 }
80
81-function lstheme
82-{
83+function _theme {
84+ _arguments "1: :($(lstheme))"
85+}
86+
87+compdef _theme theme
88+
89+function lstheme {
90 # Resources:
91 # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Modifiers
92 # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Qualifiers
93- print -l {$ZSH,$ZSH_CUSTOM}/themes/*.zsh-theme(N:t:r)
94+ print "$ZSH_CUSTOM"/*.zsh-theme(N:t:r) {"$ZSH_CUSTOM","$ZSH"}/themes/*.zsh-theme(N:t:r)
95 }
96diff --git a/themes/random.zsh-theme b/themes/random.zsh-theme
97new file mode 100644
98index 0000000000000000000000000000000000000000..43f6cbb60b5e9b4db46aec9cba2e5c0bb03ce2d2
99--- /dev/null
100+++ b/themes/random.zsh-theme
101@@ -0,0 +1,38 @@
102+# Make themes a unique array
103+typeset -Ua themes
104+
105+if [[ "${(t)ZSH_THEME_RANDOM_CANDIDATES}" = array && ${#ZSH_THEME_RANDOM_CANDIDATES[@]} -gt 0 ]]; then
106+ # Use ZSH_THEME_RANDOM_CANDIDATES if properly defined
107+ themes=($ZSH_THEME_RANDOM_CANDIDATES)
108+else
109+ # Look for themes in $ZSH_CUSTOM and $ZSH and add only the theme name
110+ themes=(
111+ "$ZSH_CUSTOM"/*.zsh-theme(N:t:r)
112+ "$ZSH_CUSTOM"/themes/*.zsh-theme(N:t:r)
113+ "$ZSH"/themes/*.zsh-theme(N:t:r)
114+ )
115+ # Remove blacklisted themes from the list
116+ for theme in ${ZSH_THEME_RANDOM_BLACKLIST[@]}; do
117+ themes=("${(@)themes:#$theme}")
118+ done
119+fi
120+
121+# Choose a theme out of the pool of candidates
122+N=${#themes[@]}
123+(( N = (RANDOM%N) + 1 ))
124+RANDOM_THEME="${themes[$N]}"
125+unset N themes theme
126+
127+# Source theme
128+if [[ -f "$ZSH_CUSTOM/$RANDOM_THEME.zsh-theme" ]]; then
129+ source "$ZSH_CUSTOM/$RANDOM_THEME.zsh-theme"
130+elif [[ -f "$ZSH_CUSTOM/themes/$RANDOM_THEME.zsh-theme" ]]; then
131+ source "$ZSH_CUSTOM/themes/$RANDOM_THEME.zsh-theme"
132+elif [[ -f "$ZSH/themes/$RANDOM_THEME.zsh-theme" ]]; then
133+ source "$ZSH/themes/$RANDOM_THEME.zsh-theme"
134+else
135+ echo "[oh-my-zsh] Random theme '${RANDOM_THEME}' not found"
136+ return 1
137+fi
138+
139+echo "[oh-my-zsh] Random theme '${RANDOM_THEME}' loaded"