LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 553|回复: 3

Zsh 线框提示符

[复制链接]
发表于 2009-4-17 09:24:04 | 显示全部楼层 |阅读模式
原来的版本不能正确处理包括中文的路径
折腾了下,好了
直接 source 就可以看到效果(在 bash 下 source 效果不太好)

  1. function precmd {

  2. local TERMWIDTH
  3. (( TERMWIDTH = ${COLUMNS} - 1 ))


  4. ###
  5. # Truncate the path if it's too long.

  6. PR_FILLBAR=""
  7. PR_PWDLEN=""

  8. local count_db_wth_char="$( echo ${^${(%):-%~}} | sed 's/\(.\)/\1\n/g' | grep -c \[\^\!-\~\] )"
  9. local promptsize=${#${(%):---(%n@%m:%l)---()--}}
  10. local pwdsize=${#${(%):-%~}}+$count_db_wth_char

  11. if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then
  12. ((PR_PWDLEN=$TERMWIDTH - $promptsize))
  13. else
  14. PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}"
  15. fi


  16. ###
  17. # Get APM info.

  18. #if which ibam > /dev/null; then
  19. #PR_APM_RESULT=`ibam --percentbattery`
  20. #elif which apm > /dev/null; then
  21. #PR_APM_RESULT=`apm`
  22. #fi
  23. }


  24. setopt extended_glob
  25. preexec () {
  26. if [[ "$TERM" == "screen" ]]; then
  27. local CMD=${1[(wr)^(*=*|sudo|-*)]}
  28. echo -n "\ek$CMD\e\"
  29. fi
  30. }

  31. setprompt () {
  32. ###
  33. # Need this so the prompt will work.

  34. setopt prompt_subst


  35. ###
  36. # See if we can use colors.

  37. autoload colors zsh/terminfo
  38. if [[ "$terminfo[colors]" -ge 8 ]]; then
  39. colors
  40. fi
  41. for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
  42. eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}'
  43. eval PR_LIGHT_$color='%{$fg[${(L)color}]%}'
  44. (( count = $count + 1 ))
  45. done
  46. PR_NO_COLOUR="%{$terminfo[sgr0]%}"


  47. ###
  48. # See if we can use extended characters to look nicer.

  49. typeset -A altchar
  50. set -A altchar ${(s..)terminfo[acsc]}
  51. PR_SET_CHARSET="%{$terminfo[enacs]%}"
  52. PR_SHIFT_IN="%{$terminfo[smacs]%}"
  53. PR_SHIFT_OUT="%{$terminfo[rmacs]%}"
  54. PR_HBAR=${altchar[q]:--}
  55. #PR_HBAR=" "
  56. PR_ULCORNER=${altchar[l]:--}
  57. PR_LLCORNER=${altchar[m]:--}
  58. PR_LRCORNER=${altchar[j]:--}
  59. PR_URCORNER=${altchar[k]:--}


  60. ###
  61. # Decide if we need to set titlebar text.

  62. case $TERM in
  63. xterm*)
  64. PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}'
  65. ;;
  66. screen)
  67. PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}'
  68. ;;
  69. *)
  70. PR_TITLEBAR=''
  71. ;;
  72. esac


  73. ###
  74. # Decide whether to set a screen title
  75. if [[ "$TERM" == "screen" ]]; then
  76. PR_STITLE=$'%{\ekzsh\e\\%}'
  77. else
  78. PR_STITLE=''
  79. fi


  80. ###
  81. # APM detection

  82. #if which ibam > /dev/null; then
  83. #PR_APM='$PR_RED${${PR_APM_RESULT[(f)1]}[(w)-2]}%%(${${PR_APM_RESULT[(f)3]}[(w)-1]})$PR_LIGHT_BLUE:'
  84. #elif which apm > /dev/null; then
  85. #PR_APM='$PR_RED${PR_APM_RESULT[(w)5,(w)6]/\% /%%}$PR_LIGHT_BLUE:'
  86. #else
  87. PR_APM=''
  88. #fi


  89. ###
  90. # Finally, the prompt.

  91. PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\
  92. $PR_CYAN$PR_SHIFT_IN$PR_ULCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
  93. $PR_GREEN%(!.%SROOT%s.%n)$PR_GREEN@%m:%l\
  94. $PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_HBAR${(e)PR_FILLBAR}$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
  95. $PR_MAGENTA%$PR_PWDLEN<...<%~%<<\
  96. $PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_URCORNER$PR_SHIFT_OUT\

  97. $PR_CYAN$PR_SHIFT_IN$PR_LLCORNER$PR_BLUE$PR_HBAR$PR_SHIFT_OUT(\
  98. %(?..$PR_LIGHT_RED%?$PR_BLUE:)\
  99. ${(e)PR_APM}$PR_YELLOW%D{%H:%M}\
  100. $PR_LIGHT_BLUE:%(!.$PR_RED.$PR_WHITE)%#$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
  101. $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
  102. $PR_NO_COLOUR '

  103. RPROMPT=' $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_BLUE$PR_HBAR$PR_SHIFT_OUT\
  104. ($PR_YELLOW%D{%a,%b%d}$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_CYAN$PR_LRCORNER$PR_SHIFT_OUT$PR_NO_COLOUR'

  105. PS2='$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
  106. $PR_BLUE$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\
  107. $PR_LIGHT_GREEN%_$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\
  108. $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR '
  109. }

  110. setprompt     
复制代码
 楼主| 发表于 2009-4-17 09:29:39 | 显示全部楼层
上图 附效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2009-4-17 09:35:07 | 显示全部楼层
如果字符超过了窗体宽度,会被隐蔽.
~_~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-17 09:39:04 | 显示全部楼层
上图看看 a a
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表