Merge pull request #8651 from mcornella/random-theme-refactor
Add random theme and consolidate logic from init and themes pluginmaster
commit
bc9fe7423f
4 changed files with 63 additions and 40 deletions
@ -1,3 +0,0 @@ |
|||||||
#compdef theme |
|
||||||
|
|
||||||
_arguments "1: :($(lstheme | tr "\n" " "))" |
|
||||||
@ -1,26 +1,27 @@ |
|||||||
function theme |
function theme { |
||||||
{ |
: ${1:=random} # Use random theme if none provided |
||||||
if [ -z "$1" ] || [ "$1" = "random" ]; then |
|
||||||
themes=($ZSH/themes/*zsh-theme) |
if [[ -f "$ZSH_CUSTOM/$1.zsh-theme" ]]; then |
||||||
N=${#themes[@]} |
source "$ZSH_CUSTOM/$1.zsh-theme" |
||||||
((N=(RANDOM%N)+1)) |
elif [[ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ]]; then |
||||||
RANDOM_THEME=${themes[$N]} |
source "$ZSH_CUSTOM/themes/$1.zsh-theme" |
||||||
source "$RANDOM_THEME" |
elif [[ -f "$ZSH/themes/$1.zsh-theme" ]]; then |
||||||
echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..." |
source "$ZSH/themes/$1.zsh-theme" |
||||||
else |
else |
||||||
if [ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ] |
echo "$0: Theme '$1' not found" |
||||||
then |
return 1 |
||||||
source "$ZSH_CUSTOM/themes/$1.zsh-theme" |
|
||||||
else |
|
||||||
source "$ZSH/themes/$1.zsh-theme" |
|
||||||
fi |
|
||||||
fi |
fi |
||||||
} |
} |
||||||
|
|
||||||
function lstheme |
function _theme { |
||||||
{ |
_arguments "1: :($(lstheme))" |
||||||
|
} |
||||||
|
|
||||||
|
compdef _theme theme |
||||||
|
|
||||||
|
function lstheme { |
||||||
# Resources: |
# Resources: |
||||||
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Modifiers |
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Modifiers |
||||||
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Qualifiers |
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Qualifiers |
||||||
print -l {$ZSH,$ZSH_CUSTOM}/themes/*.zsh-theme(N:t:r) |
print "$ZSH_CUSTOM"/*.zsh-theme(N:t:r) {"$ZSH_CUSTOM","$ZSH"}/themes/*.zsh-theme(N:t:r) |
||||||
} |
} |
||||||
|
|||||||
@ -0,0 +1,38 @@ |
|||||||
|
# Make themes a unique array |
||||||
|
typeset -Ua themes |
||||||
|
|
||||||
|
if [[ "${(t)ZSH_THEME_RANDOM_CANDIDATES}" = array && ${#ZSH_THEME_RANDOM_CANDIDATES[@]} -gt 0 ]]; then |
||||||
|
# Use ZSH_THEME_RANDOM_CANDIDATES if properly defined |
||||||
|
themes=($ZSH_THEME_RANDOM_CANDIDATES) |
||||||
|
else |
||||||
|
# Look for themes in $ZSH_CUSTOM and $ZSH and add only the theme name |
||||||
|
themes=( |
||||||
|
"$ZSH_CUSTOM"/*.zsh-theme(N:t:r) |
||||||
|
"$ZSH_CUSTOM"/themes/*.zsh-theme(N:t:r) |
||||||
|
"$ZSH"/themes/*.zsh-theme(N:t:r) |
||||||
|
) |
||||||
|
# Remove blacklisted themes from the list |
||||||
|
for theme in ${ZSH_THEME_RANDOM_BLACKLIST[@]}; do |
||||||
|
themes=("${(@)themes:#$theme}") |
||||||
|
done |
||||||
|
fi |
||||||
|
|
||||||
|
# Choose a theme out of the pool of candidates |
||||||
|
N=${#themes[@]} |
||||||
|
(( N = (RANDOM%N) + 1 )) |
||||||
|
RANDOM_THEME="${themes[$N]}" |
||||||
|
unset N themes theme |
||||||
|
|
||||||
|
# Source theme |
||||||
|
if [[ -f "$ZSH_CUSTOM/$RANDOM_THEME.zsh-theme" ]]; then |
||||||
|
source "$ZSH_CUSTOM/$RANDOM_THEME.zsh-theme" |
||||||
|
elif [[ -f "$ZSH_CUSTOM/themes/$RANDOM_THEME.zsh-theme" ]]; then |
||||||
|
source "$ZSH_CUSTOM/themes/$RANDOM_THEME.zsh-theme" |
||||||
|
elif [[ -f "$ZSH/themes/$RANDOM_THEME.zsh-theme" ]]; then |
||||||
|
source "$ZSH/themes/$RANDOM_THEME.zsh-theme" |
||||||
|
else |
||||||
|
echo "[oh-my-zsh] Random theme '${RANDOM_THEME}' not found" |
||||||
|
return 1 |
||||||
|
fi |
||||||
|
|
||||||
|
echo "[oh-my-zsh] Random theme '${RANDOM_THEME}' loaded" |
||||||
Loading…
Reference in new issue