From 17a3040fb730b71414f97d33474e995a3f80eb14 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Thu, 18 Nov 1999 15:15:27 +0000 Subject: manual/8668 --- Functions/Prompts/promptinit | 98 +++++++++++++++++++++++++++++++++----------- 1 file changed, 74 insertions(+), 24 deletions(-) (limited to 'Functions/Prompts/promptinit') diff --git a/Functions/Prompts/promptinit b/Functions/Prompts/promptinit index c249412cf..2786f9ac7 100644 --- a/Functions/Prompts/promptinit +++ b/Functions/Prompts/promptinit @@ -1,6 +1,10 @@ -# zsh prompt themes extension -# -# Load with `autoload -U promptinit; promptinit'. +## +## zsh prompt themes extension +## by Adam Spiers +## +## Load with `autoload -U promptinit; promptinit'. +## Type `prompt -h' for help. +## prompt_themes=() typeset -gU prompt_themes @@ -19,10 +23,10 @@ promptinit () { prompt_themes=($name $prompt_themes) autoload -U prompt_${name}_setup else - print "Couldn't find theme $theme" + print "Couldn't read file $theme containing theme $name." fi else - print "eh?" + print "Eh? Mismatch between glob patterns in promptinit." fi done @@ -31,7 +35,7 @@ promptinit () { colors # Variables common to all prompt styles - prompt_newline=$(echo -ne "\n%{\r%}") + prompt_newline=$'\n%{\r%}' } set_prompt() { @@ -40,21 +44,35 @@ set_prompt() { usage='Usage: prompt Options: + -c Show currently selected theme and parameters -l List currently available prompt themes -p [] Preview given themes (defaults to all) -h [] Display help (for given theme) -s Set and save theme - Switch to new theme immediately (changes not saved)' + Switch to new theme immediately (changes not saved) - getopts "hlps" opt +Use prompt -h for help on specific themes.' + + getopts "chlps" opt case "$opt" in + c) if (( $+prompt_theme )); then + print -n "Current prompt theme" + (( $#prompt_theme > 1 )) && print -n " with parameters" + print " is:\n $prompt_theme" + else + print "Current prompt is not a theme." + fi + return + ;; h) if [[ -n "$2" && -n $prompt_themes[(r)$2] ]]; then if functions prompt_$2_help >/dev/null; then - print "Help for $2 theme:\n" + print "Help for $2 theme:\n" prompt_$2_help else - print "No help available for $2 theme" + print "No help available for $2 theme." fi + print "\nType \`prompt -p $2' to preview the theme, \`prompt $2'" + print "to try it out, and \`prompt -s $2' to use it in future sessions." else print "$usage" fi @@ -65,22 +83,33 @@ Options: ;; p) if (( ! $+prompt_theme )); then print "Cannot preview; current prompt is non-themeable and would" - print "be destroyed." - return + print "be destroyed." + return fi preview=( $prompt_themes ) - [[ -n "$2" && -n $prompt_themes[(r)$2] ]] && preview=( $*[2,-1] ) + (( $#* > 1 )) && 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" + theme_args=( "$=theme" ) + [[ "$theme" == "$prompt_theme[*]" ]] && continue + if [[ -z "$prompt_themes[(r)$theme_args[1]]" ]]; then + print "\nUnknown theme: $theme_args[1]" + continue + fi + print + + # The next line is a bit ugly. It (perhaps unnecessarily) + # runs the prompt theme setup function to ensure that if + # the theme has a _preview function that it's been autoloaded. + prompt_${theme_args[1]}_setup + + if functions prompt_${theme_args[1]}_preview >&/dev/null; then + prompt_${theme_args[1]}_preview "${(@)theme_args[2,-1]}" + else + prompt_preview_theme "${(@)theme_args}" + fi done print - prompt_${prompt_theme}_setup + prompt_${prompt_theme[1]}_setup "${(@)prompt_theme[2,-1]}" ;; s) print "Set and save not yet implemented. Please ensure your ~/.zshrc" print "contains something similar to the following:\n" @@ -88,12 +117,22 @@ Options: print " promptinit" print " prompt $*[2,-1]" ;; - *) if [[ -z "$1" || -z $prompt_themes[(r)$1] ]]; then + *) if [[ "$1" == 'random' ]]; then + local random_themes + if (( $#* == 1 )); then + random_themes=( $prompt_themes ) + else + random_themes=( "$@[2,-1]" ) + fi + local i=$(( ( $RANDOM % $#random_themes ) + 1 )) + argv=( "${=random_themes[$i]}" ) + fi + if [[ -z "$1" || -z $prompt_themes[(r)$1] ]]; then print "$usage" return fi - prompt_$1_setup $*[2,-1] - prompt_theme=( $* ) + prompt_$1_setup "$@[2,-1]" + prompt_theme=( "$@" ) # Avoid screwing up the environment listing PSZZZZ=$reset_color @@ -114,4 +153,15 @@ prompt () { setopt noprompt{bang,cr,percent,subst} prompt${^prompt_opts[@]} } +prompt_preview_theme () { + print -n "$1 theme" + (( $#* > 1 )) && print -n " with parameters \`$*[2,-1]'" + print ":" + prompt_${1}_setup "$@[2,-1]" + precmd + print -n -P "${PS1}" + preexec + print "command arg1 arg2 ... argn" +} + promptinit "$@" -- cgit 1.4.1