Guest User

zsh.prompt

a guest
Nov 22nd, 2010
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.10 KB | None | 0 0
  1. function precmd {
  2.  
  3.     local TERMWIDTH
  4.     (( TERMWIDTH = ${COLUMNS} - 1 ))
  5.  
  6.  
  7.     ###
  8.     # Truncate the path if it's too long.
  9.    
  10.     PR_FILLBAR=""
  11.     PR_PWDLEN=""
  12.    
  13.     local promptsize=${#${(%):------(%n@%m:%l)-------------()---------}}
  14.     local pwdsize=${#${(%):-%~}}
  15.    
  16.     if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then
  17.         ((PR_PWDLEN=$TERMWIDTH - $promptsize))
  18.     else
  19.     PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}"
  20.     fi
  21.  
  22.  
  23.     ###
  24.     # Get APM info.
  25.  
  26.     if which ibam > /dev/null; then
  27.     PR_APM_RESULT=`ibam --percentbattery`
  28.     elif which apm > /dev/null; then
  29.     PR_APM_RESULT=`apm`
  30.     fi
  31. }
  32.  
  33.  
  34. setopt extended_glob
  35. preexec () {
  36.     if [[ "$TERM" == "screen" ]]; then
  37.     local CMD=${1[(wr)^(*=*|sudo|-*)]}
  38.     echo -n "\ek$CMD\e\\"
  39.    fi
  40. }
  41.  
  42.  
  43. setprompt () {
  44.    ###
  45.    # Need this so the prompt will work.
  46.  
  47.    setopt prompt_subst
  48.  
  49.  
  50.    ###
  51.    # See if we can use colors.
  52.  
  53.    autoload colors zsh/terminfo
  54.    if [[ "$terminfo[colors]" -ge 8 ]]; then
  55.     colors
  56.    fi
  57.    for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
  58.     eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
  59.     eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
  60.     (( count = $count + 1 ))
  61.    done
  62.    PR_NO_COLOUR="%{$terminfo[sgr0]%}"
  63.    PR_BGREEN=$'%{\e[0;92m%}'
  64.    PR_DGREEN=$'%{\e[0;32m%}'
  65.    PR_BLUE=$'%{\e[0;94m%}'
  66.    PR_BWHITE='%b%F{white}'
  67.    PR_DWHITE=$'%{\e[0;90m%}'
  68.    PR_CYAN='%b%F{cyan}'
  69.  
  70.  
  71.    ###
  72.    # See if we can use extended characters to look nicer.
  73.    
  74.    typeset -A altchar
  75.    set -A altchar ${(s..)terminfo[acsc]}
  76.    PR_SET_CHARSET="%{$terminfo[enacs]%}"
  77.    PR_SHIFT_IN="%{$terminfo[smacs]%}"
  78.    PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
  79.    PR_HBAR=${altchar[q]:--}
  80.    PR_ULCORNER=${altchar[l]:--}
  81.    PR_LLCORNER=${altchar[m]:--}
  82.    PR_LRCORNER=${altchar[j]:--}
  83.    PR_URCORNER=${altchar[k]:--}
  84.  
  85.    
  86.    ###
  87.    # Decide if we need to set titlebar text.
  88.    
  89.    case $TERM in
  90.     xterm*)
  91.         PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}'
  92.         ;;
  93.     screen)
  94.         PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
  95.         ;;
  96.     *)
  97.         PR_TITLEBAR=''
  98.         ;;
  99.    esac
  100.    
  101.    
  102.    ###
  103.    # Decide whether to set a screen title
  104.    if [[ "$TERM" == "screen" ]]; then
  105.     PR_STITLE=$'%{\ekzsh\e\\%}'
  106.    else
  107.     PR_STITLE=''
  108.    fi
  109.    
  110.    ###
  111.    # Decide whether it is a remote login
  112.    if [[ -n "$SSH_CLIENT" ]]; then
  113.        PR_HOSTNAME_CL=$PR_RED
  114.    else
  115.        PR_HOSTNAME_CL=$PR_DGREEN
  116.    fi
  117.    ###
  118.    # APM detection
  119.    
  120.    if which ibam > /dev/null; then
  121.     PR_APM='$PR_RED${${PR_APM_RESULT[(f)1]}[(w)-2]}%%(${${PR_APM_RESULT[(f)3]}[(w)-1]})$PR_LIGHT_BLUE:'
  122.    elif which apm > /dev/null; then
  123.     PR_APM='$PR_RED${PR_APM_RESULT[(w)5,(w)6]/\% /%%}$PR_LIGHT_BLUE:'
  124.    else
  125.     PR_APM=''
  126.    fi
  127.    
  128.    
  129.    ###
  130.    # Finally, the prompt.
  131.    PR_FADEIN=$PR_DWHITE$PR_HBAR$PR_HBAR$PR_DGREEN$PR_HBAR$PR_BGREEN$PR_HBAR$PR_BWHITE$PR_HBAR$PR_HBAR$PR_BGREEN$PR_HBAR
  132.    PR_FADEOUT=$PR_BWHITE$PR_HBAR$PR_BGREEN$PR_HBAR$PR_DGREEN$PR_HBAR$PR_DWHITE$PR_HBAR
  133.  
  134.    PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
  135. $PR_BWHITE$PR_SHIFT_IN$PR_ULCORNER$PR_HBAR$PR_FADEOUT$PR_SHIFT_OUT${PR_BGREEN}[\
  136. $PR_DGREEN%n$PR_BGREEN@$PR_HOSTNAME_CL%m$PR_DGREEN:%l\
  137. ${PR_BGREEN}]$PR_SHIFT_IN$PR_FADEIN$PR_DGREEN${(e)PR_FILLBAR}$PR_BGREEN$PR_HBAR$PR_BWHITE$PR_HBAR$PR_FADEOUT$PR_SHIFT_OUT${PR_GREEN}[\
  138. $PR_DGREEN%$PR_PWDLEN<...<%~%<<\
  139. ${PR_GREEN}]$PR_SHIFT_IN$PR_FADEIN$PR_DGREEN$PR_URCORNER$PR_SHIFT_OUT\
  140. $PR_BGREEN$PR_SHIFT_IN$PR_LLCORNER$PR_DGREEN$PR_HBAR$PR_SHIFT_OUT\
  141. $PR_SHIFT_IN$PR_DWHITE$PR_HBAR$PR_SHIFT_OUT\
  142. %(!.$PR_RED.$PR_BWHITE) %(!.#.$)$PR_NO_COLOR '
  143.  
  144.    RPROMPT=' $PR_DGREEN$PR_SHIFT_IN$PR_HBAR$PR_BGREEN$PR_HBAR$PR_SHIFT_OUT\
  145. (%(0?.$PR_DGREEN^_^.$PR_RED>_<)$PR_BGREEN)$PR_SHIFT_IN$PR_HBAR$PR_BGREEN$PR_LRCORNER$PR_SHIFT_OUT$PR_NO_COLOUR'
  146.  
  147.    PS2='$PR_SHIFT_IN$PR_FADEOUT$PR_HBAR$PR_SHIFT_OUT(\
  148. $PR_BGREEN%_)$PR_SHIFT_IN$PR_FADEOUT$PR_SHIFT_OUT\
  149. $PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT>$PR_NO_COLOUR '
  150. }
  151.  
  152. setprompt
Advertisement
Add Comment
Please, Sign In to add comment