From 338141784a80ae2635561dbf06e41eb612d2dacb Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 4 Jan 2014 17:58:29 +0100 Subject: [PATCH] Refactors theme loading. In response to #2113. --- lib/theme-and-appearance.zsh | 9 ----- oh-my-zsh.sh | 68 +++++++++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/lib/theme-and-appearance.zsh b/lib/theme-and-appearance.zsh index 0353f9db4..7b37ecc1d 100644 --- a/lib/theme-and-appearance.zsh +++ b/lib/theme-and-appearance.zsh @@ -32,15 +32,6 @@ else SCREEN_NO="" fi -# Apply theming defaults -PS1="%n@%m:%~%# " - -# git theming default: Variables for theming the git info prompt -ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name -ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt -ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty -ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean - # Setup the prompt with pretty colors setopt prompt_subst diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh index 2ae07668c..135168e26 100644 --- a/oh-my-zsh.sh +++ b/oh-my-zsh.sh @@ -67,22 +67,56 @@ for config_file ($ZSH_CUSTOM/*.zsh(N)); do done unset config_file -# Load the theme -if [ "$ZSH_THEME" = "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..." -else - if [ ! "$ZSH_THEME" = "" ]; then - if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then - source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" - elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then - source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" - else - source "$ZSH/themes/$ZSH_THEME.zsh-theme" +# Sources ZSH_THEME +# Does nothing if ZSH_THEME is an empty string or unset +_source_zsh_theme() { + if [ "$ZSH_THEME" = "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..." + elif; then + if [ ! "$ZSH_THEME" = "" ]; then + if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then + source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" + elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then + source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" + else + source "$ZSH/themes/$ZSH_THEME.zsh-theme" + fi fi fi -fi +} + +_default_theming() { + echo "Falling back to default theming" + # default prompt + PS1="%n@%m:%~%# " + + # default variables for theming the git info prompt + ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name + ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt + ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty + ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean +} + +# Tries to source a theme given as ZSH_THEME. +# If ZSH_THEME is not set, nothing is done at all. This is +# to enable users do circumvent the theming of oh-my-zsh +# on purpose. +# If ZSH_THEME contains an invalid theme string, a fallback +# is provided. +# Takes an argument to provide a new value fo ZSH_THEME +# before loading it. +# Example to load a random theme:: +# load_zsh_theme random +# Example to load whatever ZSH_THEME currently is: +# load_zsh_theme +load_zsh_theme() { + if [ ! "$1" = '' ]; then; ZSH_THEME="$1"; fi + _source_zsh_theme || _default_theming +} + +load_zsh_theme