# # Taken from http://aperiodic.net/phil/prompt/ and adapted using acpi first # Suitable only for zsh >= 4 # function find_apm { ### # Get APM info. We keep in memory location of the command used for APM info # since doing a which at every carriage return can be very/too expensive # even a bad idea when the search path includes global filesystems if [ "${PR_APM_LOCATION}" = "" ]; then PR_APM_LOCATION=`whence -ap ibabm | head -1 2>/dev/null` if [ "${PR_APM_LOCATION}" = "" ]; then PR_APM_LOCATION=`whence -ap acpi | head -1 2>/dev/null` if [ "${PR_APM_LOCATION}" = "" ]; then PR_APM_LOCATION=`whence -ap apm | head -1 2>/dev/null` if [ "${PR_APM_LOCATION}" = "" ]; then ### # Nothing found! PR_APM_LOCATION=notfound else ### # Is APM really supported ? apm >&/dev/null if [ $? -eq 0 ]; then PR_APM_TYPE=apm else PR_APM_LOCATION=notfound fi fi else PR_APM_TYPE=acpi fi else PR_APM_TYPE=ibabm fi fi } function find_tput { ### # Same remark as in find_apm function if [ "${PR_TPUT_LOCATION}" = "" ]; then PR_TPUT_LOCATION=`whence -ap tput | head -1 2>/dev/null` if [ "${PR_TPUT_LOCATION}" = "" ]; then PR_TPUT_LOCATION=notfound fi fi } function precmd { local TERMWIDTH (( TERMWIDTH = ${COLUMNS} - 1 )) ### # Truncate the path if it's too long. PR_FILLBAR="" PR_PWDLEN="" local promptsize=${#${(%):---(%n@%m:%l)---()--}} local pwdsize=${#${(%):-%~}} if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then ((PR_PWDLEN=$TERMWIDTH - $promptsize)) else PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}" fi find_apm if [ "${PR_APM_LOCATION}" != "notfound" ]; then [ "${PR_APM_TYPE}" = "ibabm" ] && PR_APM_RESULT=`${PR_APM_LOCATION} --percentbattery 2>/dev/null` [ "${PR_APM_TYPE}" = "acpi" ] && PR_APM_RESULT=`${PR_APM_LOCATION} -b | awk '{print $4}' | sed 's/[,%]//g' 2>/dev/null` [ "${PR_APM_TYPE}" = "apm" ] && PR_APM_RESULT=`${PR_APM_LOCATION} 2>/dev/null` fi # ## Put session name in konsole # if [ "$KONSOLE_DCOP_SESSION" ]; then dcop $KONSOLE_DCOP_SESSION renameSession `whoami`@`hostname` 2>/dev/null fi } setopt extended_glob preexec () { if [[ "$TERM" == "screen" ]]; then local CMD=${1[(wr)^(*=*|sudo|-*)]} echo -n "\ek$CMD\e\\" fi } localcolordef () { #Inspired from http://www.understudy.net/custom.html#color_prompts #Prompt Color Table Z shell fg_black=$'\e[0;30m' fg_red=$'\e[0;31m' fg_green=$'\e[0;32m' fg_brown=$'\e[0;33m' fg_blue=$'\e[0;34m' fg_purple=$'\e[0;35m' fg_cyan=$'\e[0;36m' fg_lgray=$'\e[0;37m' fg_dgray=$'\e[1;30m' fg_lred=$'\e[1;31m' fg_lgreen=$'\e[1;32m' fg_yellow=$'\e[1;33m' fg_lblue=$'\e[1;34m' fg_pink=$'\e[1;35m' fg_lcyan=$'\e[1;36m' fg_white=$'\e[1;37m' #Text Background Colors bg_red=$'\e[0;41m' bg_green=$'\e[0;42m' bg_brown=$'\e[0;43m' bg_blue=$'\e[0;44m' bg_purple=$'\e[0;45m' bg_cyan=$'\e[0;46m' bg_gray=$'\e[0;47m' #Attributes at_normal=$'\e[0m' at_bold=$'\e[1m' at_italics=$'\e[3m' at_underl=$'\e[4m' at_blink=$'\e[5m' at_outline=$'\e[6m' at_reverse=$'\e[7m' at_nondisp=$'\e[8m' at_strike=$'\e[9m' at_boldoff=$'\e[22m' at_italicsoff=$'\e[23m' at_underloff=$'\e[24m' at_blinkoff=$'\e[25m' at_reverseoff=$'\e[27m' at_strikeoff=$'\e[29m' red=$'\e[31m' green=$'\e[32m' yellow=$'\e[33m' blue=$'\e[34m' magenta=$'\e[35m' cyan=$'\e[36m' white=$'\e[37m' no_color=$'\e[m\17' } setlocalattr () { acsc='``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~' enacs=$'\e)0' smacs=`print -Pn "\016"` rmacs=`print -Pn "\017"` } setagainaltchar () { find_tput acsc='' [ "${PR_TPUT_LOCATION}" != "notfound" ] && acsc=`${PR_TPUT_LOCATION} acsc` set -A altchar ${(s..)acsc} typeset -A altchar } setprompt () { ### # Need this so the prompt will work. setopt prompt_subst ### # See if we can use colors. autoload colors zsh/terminfo if [[ "$terminfo[colors]" -ge 8 ]]; then colors for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}' eval PR_LIGHT_$color='%{$fg[${(L)color}]%}' (( count = $count + 1 )) done PR_NO_COLOUR="%{$terminfo[sgr0]%}" set -A altchar ${(s..)terminfo[acsc]} PR_SET_CHARSET="%{$terminfo[enacs]%}" PR_SHIFT_IN="%{$terminfo[smacs]%}" PR_SHIFT_OUT="%{$terminfo[rmacs]%}" else localcolordef # Using ANSI colors should totally be ok PR_RED="%{${at_bold}${red}%}" PR_LIGHT_RED="%{${red}%}" PR_GREEN="%{${at_bold}${green}%}" PR_LIGHT_GREEN="%{${green}%}" PR_YELLOW="%{${at_bold}${yellow}%}" PR_LIGHT_YELLOW="%{${yellow}%}" PR_BLUE="%{${at_bold}${blue}%}" PR_LIGHT_BLUE="%{${blue}%}" PR_MAGENTA="%{${at_bold}${magenta}%}" PR_LIGHT_MAGENTA="%{${magenta}%}" PR_CYAN="%{${at_bold}${cyan}%}" PR_LIGHT_CYAN="%{${cyan}%}" PR_WHITE="%{${at_bold}${white}%}" PR_LIGHT_WHITE="%{${white}%}" PR_NO_COLOUR="%{${no_color}%}" find_tput if [ "${PR_TPUT_LOCATION}" != "notfound" ]; then acsc=`${PR_TPUT_LOCATION} acsc` enacs=`${PR_TPUT_LOCATION} enacs` smacs=`${PR_TPUT_LOCATION} smacs` rmacs=`${PR_TPUT_LOCATION} rmacs` else setlocalattr fi set -A altchar ${(s..)acsc} PR_SET_CHARSET="%{$enacs%}" PR_SHIFT_IN="%{$smacs%}" PR_SHIFT_OUT="%{$rmacs%}" fi ### # See if we can use extended characters to look nicer. typeset -A altchar ### # There was a problem with some versions of zsh, 4.0.4 at least. Don't kow what it is. setagainaltchar PR_HBAR=${altchar[q]:--} PR_ULCORNER=${altchar[l]:--} PR_LLCORNER=${altchar[m]:--} PR_LRCORNER=${altchar[j]:--} PR_URCORNER=${altchar[k]:--} ### # Decide if we need to set titlebar text. case $TERM in xterm*) PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}' ;; screen) PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}' ;; *) PR_TITLEBAR='' ;; esac ### # Decide whether to set a screen title if [[ "$TERM" == "screen" ]]; then PR_STITLE=$'%{\ekzsh\e\\%}' else PR_STITLE='' fi find_apm if [ "${PR_APM_LOCATION}" != "notfound" ]; then PR_APM='' [ "${PR_APM_TYPE}" = "ibabm" ] && PR_APM='$PR_RED${${PR_APM_RESULT[(f)1]}[(w)-2]}%%(${${PR_APM_RESULT[(f)3]}[(w)-1]})$PR_LIGHT_BLUE:' [ "${PR_APM_TYPE}" = "acpi" ] && PR_APM='$PR_RED${PR_APM_RESULT}%%$PR_LIGHT_BLUE:' [ "${PR_APM_TYPE}" = "apm" ] && PR_APM='$PR_RED${PR_APM_RESULT[(w)5,(w)6]/\% /%%}$PR_LIGHT_BLUE:' fi ### # Finally, the prompt. PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\ $PR_CYAN$PR_SHIFT_IN$PR_ULCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\ $PR_GREEN%(!.%SROOT%s.%n)$PR_GREEN@%m:%l\ $PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_HBAR${(e)PR_FILLBAR}$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\ $PR_MAGENTA%$PR_PWDLEN<...<%~%<<\ $PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_URCORNER$PR_SHIFT_OUT\ $PR_CYAN$PR_SHIFT_IN$PR_LLCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\ %(?..$PR_LIGHT_RED%?$PR_BLUE:)\ ${(e)PR_APM}$PR_YELLOW%D{%H:%M}\ $PR_LIGHT_BLUE:%(!.$PR_RED.$PR_WHITE)%#$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\ $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\ $PR_NO_COLOUR ' RPROMPT=' $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_BLUE$PR_HBAR$PR_SHIFT_OUT\ ($PR_YELLOW%D{%a,%b%d}$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_LRCORNER$PR_SHIFT_OUT$PR_NO_COLOUR' PS2='$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\ $PR_BLUE$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\ $PR_LIGHT_GREEN%_$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\ $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR ' } setprompt