From 6adad5c300a6bfde33b593489cc1c3b645b721e8 Mon Sep 17 00:00:00 2001
From: Willy Weiskopf <william@weiskopf.me>
Date: Wed, 16 Jul 2014 22:21:09 -0600
Subject: [PATCH] Move random theme functionality into "random" theme

The statements for selecting a random theme in oh-my-zsh.sh and the themes
plugin are duplicate. Most people eventually settle on a theme, making those
lines in oh-my-zsh.sh superfluous. To address those, it may makes sense to put
the random theme functionality into a theme of its own (since themes are just
zsh scripts.
---
 oh-my-zsh.sh                     | 25 ++++++-------------------
 plugins/themes/themes.plugin.zsh | 24 +++++++++++-------------
 themes/random.zsh-theme          | 10 ++++++++++
 3 files changed, 27 insertions(+), 32 deletions(-)
 create mode 100644 themes/random.zsh-theme

diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
index c3fae6efb..30259372c 100644
--- a/oh-my-zsh.sh
+++ b/oh-my-zsh.sh
@@ -97,25 +97,12 @@ done
 unset config_file
 
 # 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)
+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
-    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 [ -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
+    source "$ZSH/themes/$ZSH_THEME.zsh-theme"
   fi
 fi
diff --git a/plugins/themes/themes.plugin.zsh b/plugins/themes/themes.plugin.zsh
index 2cd0ee327..ac4ccc980 100644
--- a/plugins/themes/themes.plugin.zsh
+++ b/plugins/themes/themes.plugin.zsh
@@ -1,19 +1,17 @@
 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..."
+    if [ -z "$1" ]; then
+        1="random"
+    fi
+
+    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"
     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
+        source "$ZSH/themes/$1.zsh-theme"
     fi
 }
 
diff --git a/themes/random.zsh-theme b/themes/random.zsh-theme
new file mode 100644
index 000000000..739567662
--- /dev/null
+++ b/themes/random.zsh-theme
@@ -0,0 +1,10 @@
+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..."
-- 
2.21.0