浏览代码

fixed theme chooser + options + list available themes + show all themes

fox 12 年之前
父节点
当前提交
cbf662744f
共有 1 个文件被更改,包括 69 次插入21 次删除
  1. 69 21
      tools/theme_chooser.sh

+ 69 - 21
tools/theme_chooser.sh

@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/zsh
 
 # Zsh Theme Chooser by fox (fox91 at anche dot no)
 # This program is free software. It comes without any warranty, to
@@ -9,9 +9,10 @@
 
 THEMES_DIR="$ZSH/themes"
 FAVLIST="${HOME}/.zsh_favlist"
+source $ZSH/oh-my-zsh.sh
 
 function noyes() {
-    read -p "$1 [y/N] " a
+    read "a?$1 [y/N] "
     if [[ $a == "N" || $a == "n" || $a = "" ]]; then
         return 0
     fi
@@ -20,29 +21,76 @@ function noyes() {
 
 function theme_preview() {
     THEME=$1
-    THEME_NAME=`echo $THEME | sed s/\.zsh-theme//`
-    export ZDOTDIR="$(mktemp -d tmp.zshXXXX)"
-
-cat <<-EOF >"$ZDOTDIR/.zshrc"
-    ZSH_THEME="$THEME_NAME"
-    source $ZSH/oh-my-zsh.sh
-EOF
-    zsh
-    rm -rf "$ZDOTDIR"
+    THEME_NAME=`echo $THEME | sed s/\.zsh-theme$//`
+    print "$fg[blue]${(l.((${COLUMNS}-${#THEME_NAME}-5))..─.)}$reset_color $THEME_NAME $fg[blue]───$reset_color"
+    source "$THEMES_DIR/$THEME"
+    print -P $PROMPT
+}
 
+function banner() {
     echo
-    noyes "Do you want to add it to your favourite list ($FAVLIST)?" || \
-          echo $THEME_NAME >> $FAVLIST
+    echo "╺━┓┏━┓╻ ╻   ╺┳╸╻ ╻┏━╸┏┳┓┏━╸   ┏━╸╻ ╻┏━┓┏━┓┏━┓┏━╸┏━┓"
+    echo "┏━┛┗━┓┣━┫    ┃ ┣━┫┣╸ ┃┃┃┣╸    ┃  ┣━┫┃ ┃┃ ┃┗━┓┣╸ ┣┳┛"
+    echo "┗━╸┗━┛╹ ╹    ╹ ╹ ╹┗━╸╹ ╹┗━╸   ┗━╸╹ ╹┗━┛┗━┛┗━┛┗━╸╹┗╸"
     echo
 }
 
-echo
-echo "╺━┓┏━┓╻ ╻   ╺┳╸╻ ╻┏━╸┏┳┓┏━╸   ┏━╸╻ ╻┏━┓┏━┓┏━┓┏━╸┏━┓"
-echo "┏━┛┗━┓┣━┫    ┃ ┣━┫┣╸ ┃┃┃┣╸    ┃  ┣━┫┃ ┃┃ ┃┗━┓┣╸ ┣┳┛"
-echo "┗━╸┗━┛╹ ╹    ╹ ╹ ╹┗━╸╹ ╹┗━╸   ┗━╸╹ ╹┗━┛┗━┛┗━┛┗━╸╹┗╸"
-echo
+function usage() {
+    echo "Usage: $0 [options] [theme]"
+    echo
+    echo "Options"
+    echo "  -l   List available themes"
+    echo "  -s   Show all themes"
+    echo "  -h   Get this help message"
+    exit 1
+}
+
+function list_themes() {
+    for THEME in $(ls $THEMES_DIR); do
+        THEME_NAME=`echo $THEME | sed s/\.zsh-theme$//`
+        echo $THEME_NAME
+    done
+}
+
+function insert_favlist() {
+    if grep -q "$THEME_NAME" $FAVLIST 2> /dev/null ; then
+        echo "Already in favlist"
+    else
+        echo $THEME_NAME >> $FAVLIST
+        echo "Saved to favlist"
+    fi
+
+}
 
-for i in $(ls $THEMES_DIR); do
-    echo "Now showing theme $i"
-    theme_preview $i
+function theme_chooser() {
+    for THEME in $(ls $THEMES_DIR); do
+        echo
+        theme_preview $THEME
+        echo
+        if [[ -z $1 ]]; then
+            noyes "Do you want to add it to your favourite list ($FAVLIST)?" || \
+                  insert_favlist $THEME_NAME
+            echo
+        fi
+    done
+}
+
+while getopts ":lhs" Option
+do
+  case $Option in
+    l ) list_themes ;;
+    s ) theme_chooser 0 ;;
+    h ) usage ;;
+    * ) usage ;; # Default.
+  esac
 done
+
+if [[ -z $Option ]]; then
+    if [[ -z $1 ]]; then
+        banner
+        echo
+        theme_chooser
+    else
+        theme_preview $1".zsh-theme"
+    fi
+fi