mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-12 20:21:02 +01:00
Merge pull request #8651 from mcornella/random-theme-refactor
Add random theme and consolidate logic from init and themes plugin
This commit is contained in:
commit
bc9fe7423f
4 changed files with 63 additions and 40 deletions
13
oh-my-zsh.sh
13
oh-my-zsh.sh
|
@ -97,18 +97,6 @@ done
|
||||||
unset config_file
|
unset config_file
|
||||||
|
|
||||||
# Load the theme
|
# Load the theme
|
||||||
if [[ "$ZSH_THEME" == "random" ]]; then
|
|
||||||
if [[ "${(t)ZSH_THEME_RANDOM_CANDIDATES}" = "array" ]] && [[ "${#ZSH_THEME_RANDOM_CANDIDATES[@]}" -gt 0 ]]; then
|
|
||||||
themes=($ZSH/themes/${^ZSH_THEME_RANDOM_CANDIDATES}.zsh-theme)
|
|
||||||
else
|
|
||||||
themes=($ZSH/themes/*zsh-theme)
|
|
||||||
fi
|
|
||||||
N=${#themes[@]}
|
|
||||||
((N=(RANDOM%N)+1))
|
|
||||||
RANDOM_THEME=${themes[$N]}
|
|
||||||
source "$RANDOM_THEME"
|
|
||||||
echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
|
|
||||||
else
|
|
||||||
if [ ! "$ZSH_THEME" = "" ]; then
|
if [ ! "$ZSH_THEME" = "" ]; then
|
||||||
if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
|
if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
|
||||||
source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
|
source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
|
||||||
|
@ -118,4 +106,3 @@ else
|
||||||
source "$ZSH/themes/$ZSH_THEME.zsh-theme"
|
source "$ZSH/themes/$ZSH_THEME.zsh-theme"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
|
@ -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 "$RANDOM_THEME"
|
|
||||||
echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
|
|
||||||
else
|
|
||||||
if [ -f "$ZSH_CUSTOM/themes/$1.zsh-theme" ]
|
|
||||||
then
|
|
||||||
source "$ZSH_CUSTOM/themes/$1.zsh-theme"
|
source "$ZSH_CUSTOM/themes/$1.zsh-theme"
|
||||||
else
|
elif [[ -f "$ZSH/themes/$1.zsh-theme" ]]; then
|
||||||
source "$ZSH/themes/$1.zsh-theme"
|
source "$ZSH/themes/$1.zsh-theme"
|
||||||
fi
|
else
|
||||||
|
echo "$0: Theme '$1' not found"
|
||||||
|
return 1
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
38
themes/random.zsh-theme
Normal file
38
themes/random.zsh-theme
Normal file
|
@ -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 a new issue