diff --git a/plugins/theme-tools/theme-tools.plugin.zsh b/plugins/theme-tools/theme-tools.plugin.zsh index 514a1e39b..44c8604f4 100644 --- a/plugins/theme-tools/theme-tools.plugin.zsh +++ b/plugins/theme-tools/theme-tools.plugin.zsh @@ -1,29 +1,46 @@ -ZSH_THEMES=$ZSH/themes +export ZSH_THEMES_PATH=$ZSH/themes -function change_theme() { +# Directly change a theme +function usetheme() { if [ $1 ] && theme_name=${1%.zsh-theme}; then - printf "Changing theme... " + printf "Changing theme to $1... " - if [ -f $ZSH_THEMES/$theme_name.zsh-theme ]; then - source $ZSH_THEMES/$theme_name.zsh-theme + if [ -f $ZSH_THEMES_PATH/$theme_name.zsh-theme ]; then + source $ZSH_THEMES_PATH/$theme_name.zsh-theme export ZSH_THEME=$theme_name echo "$fg_bold[green]Done" else - printf "$fg_bold[red]Notice$reset_color: " - echo "Could not find theme: '$theme_name.zsh-theme' in $ZSH_THEMES" + printf "$fg_bold[red]Error$reset_color: " + echo "Could not find theme: '$theme_name.zsh-theme' in $ZSH_THEMES_PATH" fi else - echo "change_theme: no theme given" + echo "No theme given" fi } -function list_themes() { - more < <( - echo "Themes available (press 'q' to quit)" - echo "====================================" - for theme ($ZSH_THEMES/*) - do - echo "${${theme%.zsh-theme}##*/}" - done) +# Change themes through a menu style prompt +function changetheme() { + theme_files=($ZSH_THEMES_PATH/*) + theme_names=(${${theme_files[@]##*/}[@]%.zsh-theme}) + + PS3="Enter your selection: " + SELECTION="" + + echo "Themes available:" + select theme in ${theme_names[@]} Quit + do + case $theme in + Quit) + echo "Exiting... " + exit;; + *) + SELECTION=$REPLY + break + ;; + esac + done + + theme="${theme_names[$SELECTION]}" + usetheme $theme }