mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-20 05:53:52 +01:00
117 lines
4.1 KiB
Plaintext
117 lines
4.1 KiB
Plaintext
# 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 "$@"
|