diff options
Diffstat (limited to 'Functions/Prompts/prompt_adam2_setup')
-rw-r--r-- | Functions/Prompts/prompt_adam2_setup | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Functions/Prompts/prompt_adam2_setup b/Functions/Prompts/prompt_adam2_setup new file mode 100644 index 000000000..34e504c03 --- /dev/null +++ b/Functions/Prompts/prompt_adam2_setup @@ -0,0 +1,116 @@ +# 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 "$@" |