mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-30 17:50:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # adam2 prompt theme
 | |
| 
 | |
| prompt_adam2_help () {
 | |
|   cat <<'EOF'
 | |
| This prompt is color-theme-able.  You can invoke it thus:
 | |
| 
 | |
|   prompt adam2 [ simple ] <color1> <color2> <color3>
 | |
| 
 | |
| where the colors are for the hyphens, current directory, and user@host
 | |
| bits respectively.
 | |
| 
 | |
| And you probably thought adam1 was overkill.  If you've ever seen a
 | |
| more complex prompt in your whole life, please e-mail it to me at
 | |
| <adam@spiers.net>; I'd love to know that I'm not the saddest person
 | |
| on the planet.
 | |
| EOF
 | |
| }
 | |
| 
 | |
| prompt_adam2_setup () {
 | |
|   # Some can't be local
 | |
|   local prompt_gfx_tlc prompt_gfx_mlc prompt_gfx_blc prompt_gfx_bbox 
 | |
| 
 | |
|   if [[ $1 == 'plain' ]]; then
 | |
|     shift
 | |
|     prompt_gfx_tlc='.'
 | |
|     prompt_gfx_mlc='|'
 | |
|     prompt_gfx_blc='\`'
 | |
|     prompt_gfx_hyphen='-'
 | |
|   else
 | |
|     prompt_gfx_tlc=$(echo "\xda")
 | |
|     prompt_gfx_mlc=$(echo "\xc3")
 | |
|     prompt_gfx_blc=$(echo "\xc0")
 | |
|     prompt_gfx_hyphen=$(echo "\xc4")
 | |
|   fi
 | |
| 
 | |
|   # Colour scheme
 | |
|   prompt_scheme_color1=${1:-'cyan'}    # hyphens
 | |
|   prompt_scheme_color2=${2:-'green'}   # current directory
 | |
|   prompt_scheme_color3=${3:-'cyan'}    # user@host
 | |
| 
 | |
|   local num
 | |
|   for num in 1 2 3; do
 | |
|     # Grok this!
 | |
|     eval "prompt_color$num="'${(P)$(echo "fg_no_bold_$prompt_scheme_color'"$num\")}"
 | |
|     eval "prompt_bold_color$num="'${(P)$(echo "fg_bold_$prompt_scheme_color'"$num\")}"
 | |
|   done
 | |
| 
 | |
|   prompt_gfx_tbox=$(echo "%{$prompt_bold_color1%}${prompt_gfx_tlc}%{$prompt_color1%}${prompt_gfx_hyphen}")
 | |
|   prompt_gfx_bbox=$(echo "%{$prompt_bold_color1%}${prompt_gfx_blc}${prompt_gfx_hyphen}%{$prompt_color1%}")
 | |
| 
 | |
|   # This is a cute hack.  Well I like it, anyway.
 | |
|   prompt_gfx_bbox_to_mbox=$(echo "%{\e[A\r$prompt_bold_color1${prompt_gfx_mlc}$prompt_color1${prompt_gfx_hyphen}\e[B%}")
 | |
| 
 | |
|   prompt_l_paren=$(echo "%{$fg_bold_grey%}(")
 | |
|   prompt_r_paren=$(echo "%{$fg_bold_grey%})")
 | |
| 
 | |
|   prompt_l_bracket=$(echo "%{$fg_bold_grey%}[")
 | |
|   prompt_r_bracket=$(echo "%{$fg_bold_grey%}]")
 | |
| 
 | |
|   prompt_machine=$(echo "%{$prompt_color3%}%n%{$prompt_bold_color3%}@%{$prompt_color3%}%m")
 | |
| 
 | |
|   prompt_padding_text=`perl -e "print qq{${prompt_gfx_hyphen}} x 200"`
 | |
| 
 | |
|   prompt_line_1a="$prompt_gfx_tbox$prompt_l_paren%{$prompt_bold_color2%}%~$prompt_r_paren%{$prompt_color1%}"
 | |
|   prompt_line_1a_no_color=$(echo "$prompt_line_1a" | perl -pe "s/%{.*?%}//g")
 | |
|   prompt_line_1b=$(echo "$prompt_l_paren$prompt_machine$prompt_r_paren%{$prompt_color1%}${prompt_gfx_hyphen}")
 | |
|   prompt_line_1b_no_color=$(echo "$prompt_line_1b" | perl -pe "s/%{.*?%}//g")
 | |
| 
 | |
|   prompt_line_2="$prompt_gfx_bbox${prompt_gfx_hyphen}%{$fg_bold_white%}"
 | |
| 
 | |
|   prompt_char="%(!.#.>)"
 | |
| 
 | |
|   precmd () { prompt_adam2_precmd }
 | |
|   preexec () { prompt_adam2_preexec }
 | |
| }
 | |
| 
 | |
| prompt_adam2_precmd () {
 | |
|   setopt noxtrace localoptions
 | |
|   local prompt_line_1a_no_color_expanded prompt_line_2a_no_color_expanded
 | |
|   local prompt_padding_size prompt_padding prompt_line_1 pre_prompt
 | |
|   local prompt_pwd_size
 | |
| 
 | |
|   prompt_line_1a_no_color_expanded=$(print -P "$prompt_line_1a_no_color")
 | |
|   prompt_line_1b_no_color_expanded=$(print -P "$prompt_line_1b_no_color")
 | |
|   prompt_padding_size=$(( $COLUMNS
 | |
|                             - $#prompt_line_1a_no_color_expanded 
 | |
|                             - $#prompt_line_1b_no_color_expanded ))
 | |
| 
 | |
|   if [[ $prompt_padding_size -ge 0 ]]; then
 | |
|     prompt_padding=$(printf "%$prompt_padding_size.${prompt_padding_size}s" "$prompt_padding_text")
 | |
|     prompt_line_1="$prompt_line_1a$prompt_padding$prompt_line_1b"
 | |
|   else
 | |
|     prompt_padding_size=$(( $COLUMNS
 | |
|                               - $#prompt_line_1a_no_color_expanded ))
 | |
| 
 | |
|     if [[ $prompt_padding_size -ge 0 ]]; then
 | |
|       prompt_padding=$(printf "%$prompt_padding_size.${prompt_padding_size}s" "$prompt_padding_text")
 | |
|       prompt_line_1="$prompt_line_1a$prompt_padding"
 | |
|     else
 | |
|       prompt_pwd_size=$(( $COLUMNS - 5 ))
 | |
|       prompt_line_1="$prompt_gfx_tbox$prompt_l_paren%{$prompt_bold_color2%}%$prompt_pwd_size<...<%~%<<$prompt_r_paren%{$prompt_color1$prompt_gfx_hyphen%}"
 | |
|     fi
 | |
|   fi
 | |
| 
 | |
|   pre_prompt="$prompt_line_1$prompt_newline$prompt_line_2"
 | |
| 
 | |
|   PS1="$pre_prompt%{$fg_bold_white%}$prompt_char "
 | |
|   PS2="$prompt_line_2%{$prompt_gfx_bbox_to_mbox$fg_bold_white%}%_> "
 | |
|   PS3="$prompt_line_2%{$prompt_gfx_bbox_to_mbox$fg_bold_white%}?# "
 | |
| }
 | |
| 
 | |
| prompt_adam2_preexec () {
 | |
|   print -n "$fg_no_bold_white"
 | |
| }
 | |
| 
 | |
| prompt_adam2_setup "$@"
 |