summaryrefslogtreecommitdiff
path: root/Functions/Prompts/promptinit
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-10-04 22:57:19 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-10-04 22:57:19 +0000
commitd3170c8ee6eb6aa6050d6531536e5e9fba278b57 (patch)
tree4be666df9d3dcce75a68560c44f40b6efe79c24d /Functions/Prompts/promptinit
parent298c35419d8da664ba22f9daa26758798da390d4 (diff)
downloadzsh-d3170c8ee6eb6aa6050d6531536e5e9fba278b57.tar.gz
zsh-d3170c8ee6eb6aa6050d6531536e5e9fba278b57.zip
Initial revision
Diffstat (limited to 'Functions/Prompts/promptinit')
-rw-r--r--Functions/Prompts/promptinit107
1 files changed, 107 insertions, 0 deletions
diff --git a/Functions/Prompts/promptinit b/Functions/Prompts/promptinit
new file mode 100644
index 000000000..2cf2a4674
--- /dev/null
+++ b/Functions/Prompts/promptinit
@@ -0,0 +1,107 @@
+# zsh prompt themes extension
+#
+# Load with `autoload -U promptinit; promptinit'.
+
+prompt_themes=()
+typeset -gU prompt_themes
+typeset -g prompt_theme
+
+promptinit () {
+ emulate -L zsh
+ local ppath='' name
+
+ # Autoload all prompt_*_setup functions in fpath
+ for theme in $fpath/prompt_*_setup(N); do
+ if [[ $theme == */prompt_(#b)(*)_setup ]]; then
+ name="$match[1]"
+ if [[ -r "$theme" ]]; then
+ prompt_themes=($name $prompt_themes)
+ autoload -U prompt_${name}_setup
+ else
+ print "Couldn't find theme $theme"
+ fi
+ else
+ print "eh?"
+ fi
+ done
+
+ # Color definitions come in handy
+ autoload -U colors
+ colors
+
+ # Variables common to all prompt styles
+ prompt_newline=$(echo -ne "\n%{\r%}")
+}
+
+prompt () {
+ local opt preview theme usage old_theme
+
+ usage='Usage: prompt <options>
+Options:
+ -l List currently available prompt themes
+ -p [<themes>] Preview given themes (defaults to all)
+ -h [<theme>] Display help (for given theme)
+ -s <theme> Set and save theme
+ <theme> Switch to new theme immediately (changes not saved)'
+
+ getopts "hlps" opt
+ case "$opt" in
+ h) if [[ -n "$2" && -n $prompt_themes[(r)$2] ]]; then
+ if functions prompt_$2_help >/dev/null; then
+ print "Help for $2 theme:\n"
+ prompt_$2_help
+ else
+ print "No help available for $2 theme"
+ fi
+ else
+ print "$usage"
+ fi
+ ;;
+ l) print Currently available prompt themes:
+ print $prompt_themes
+ return
+ ;;
+ p) if (( ! $+prompt_theme )); then
+ print "Cannot preview; current prompt is non-themeable and would"
+ print "be destroyed."
+ return
+ fi
+ preview=( $prompt_themes )
+ [[ -n "$2" && -n $prompt_themes[(r)$2] ]] && preview=( $*[2,-1] )
+ for theme in $preview; do
+ [[ $theme == $prompt_theme[1] ]] && continue
+ print "\nTheme: $theme"
+ prompt_${theme}_setup
+ precmd
+ print -n -P "${PS1}"
+ preexec
+ print "command arg1 arg2 ... argn"
+ done
+ print
+ prompt_${prompt_theme}_setup
+ ;;
+ s) print "Set and save not yet implemented. Please ensure your ~/.zshrc"
+ print "contains something similar to the following:\n"
+ print " autoload -U promptinit"
+ print " promptinit"
+ print " prompt $*[2,-1]"
+ ;;
+ *) if [[ -z "$1" || -z $prompt_themes[(r)$1] ]]; then
+ print "$usage"
+ return
+ fi
+ prompt_$1_setup "$*[2,-1]"
+ prompt_theme=( $* )
+
+ # Avoid screwing up the environment listing
+ PSZZZZ=$reset_color
+ RPSZZZZ=$reset_color
+ PROMPTZZZZ=$reset_color
+ RPROMPTZZZZ=$reset_color
+ promptzzzz=$reset_color
+ ;;
+ esac
+}
+
+promptinit "$@"
+