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 |
||||
{ |
||||
if [ -z "$1" ] || [ "$1" = "random" ]; then |
||||
themes=($ZSH/themes/*zsh-theme) |
||||
N=${#themes[@]} |
||||
((N=(RANDOM%N)+1)) |
||||
RANDOM_THEME=${themes[$N]} |
||||
source "$RANDOM_THEME" |
||||
echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..." |
||||
function theme { |
||||
: ${1:=random} # Use random theme if none provided |
||||
|
||||
if [[ -f "$ZSH_CUSTOM/$1.zsh-theme" ]]; then |
||||
source "$ZSH_CUSTOM/$1.zsh-theme" |
||||
elif [[ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ]]; then |
||||
source "$ZSH_CUSTOM/themes/$1.zsh-theme" |
||||
elif [[ -f "$ZSH/themes/$1.zsh-theme" ]]; then |
||||
source "$ZSH/themes/$1.zsh-theme" |
||||
else |
||||
if [ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ] |
||||
then |
||||
source "$ZSH_CUSTOM/themes/$1.zsh-theme" |
||||
else |
||||
source "$ZSH/themes/$1.zsh-theme" |
||||
fi |
||||
echo "$0: Theme '$1' not found" |
||||
return 1 |
||||
fi |
||||
} |
||||
|
||||
function lstheme |
||||
{ |
||||
function _theme { |
||||
_arguments "1: :($(lstheme))" |
||||
} |
||||
|
||||
compdef _theme theme |
||||
|
||||
function lstheme { |
||||
# Resources: |
||||
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Modifiers |
||||
# 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