ohmyzsh/plugins/themes/themes.plugin.zsh
Andrew Janke 2012ae8126 plugins/themes:
Rewrite theme() and lstheme() to remove pwd and variable side effects and make behavior consistent.

Include custom themes in lstheme() output.
Add comments that lay down the function interface.
Look for custom themes in $ZSH_CUSTOM/themes as well as base $ZSH_CUSTOM.
Rewrite theme's random theme selection in terms of lstheme() so random themes are included, and to streamline code.
Add a failure indication to theme() with nonzero return status. When a bad theme name is requested, indicate so by issuing a warning and returning nonzero.
2015-02-14 22:25:26 -05:00

55 lines
No EOL
1.4 KiB
Bash

# Load a theme
#
# Usage:
# "theme <name>" loads the named theme
# "theme random" or "theme" with no argument loads a random theme
# Return value:
# 0 on success
# Nonzero on failure, such as requested theme not being found
function theme() {
if [[ -z "$1" ]] || [[ "$1" = "random" ]]; then
# Select a random theme
local themes n random_theme
themes=($(lstheme))
n=${#themes[@]}
((n=(RANDOM%n)+1))
random_theme=${themes[$n]}
echo "[oh-my-zsh] Loading random theme '$random_theme'..."
theme $random_theme
else
# Main case: load named theme
local name theme_dir found
name=$1
found=false
for theme_dir ($ZSH_CUSTOM $ZSH_CUSTOM/themes $ZSH/themes); do
if [[ -f "$theme_dir/$name.zsh-theme" ]]; then
source "$theme_dir/$name.zsh-theme"
found=true
break
fi
done
if [[ $found == false ]]; then
echo "[oh-my-zsh] Theme not found: $name"
return 1
fi
fi
}
# List available themes by name
#
# The list will always be in sorted order, so you can index in to it.
function lstheme(){
local themes x theme_dir
themes=()
for theme_dir ($ZSH_CUSTOM $ZSH_CUSTOM/themes $ZSH/themes); do
if [[ -d $theme_dir ]]; then
themes+=($(_omz_lstheme_dir $theme_dir))
fi
done
echo ${(F)themes} | sort | uniq
}
# List themes defined in a given dir
function _omz_lstheme_dir() {
ls $1 | grep '.zsh-theme$' | sed 's,\.zsh-theme$,,'
}