From 55eec45f693623692a968762c9136340b381f519 Mon Sep 17 00:00:00 2001 From: tokiclover Date: Thu, 18 Sep 2014 17:44:20 +0200 Subject: [PATCH] prompt: added clover theme --- modules/prompt/functions/prompt_clover_setup | 173 +++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 modules/prompt/functions/prompt_clover_setup diff --git a/modules/prompt/functions/prompt_clover_setup b/modules/prompt/functions/prompt_clover_setup new file mode 100644 index 00000000..0bb22746 --- /dev/null +++ b/modules/prompt/functions/prompt_clover_setup @@ -0,0 +1,173 @@ +# +# A theme based on (...) Extravagant Prompt with vcs_info integration. +# +# $Header: prompt_clover_setup Exp $ +# $Authors: (c) 2011-2014 -tclover Exp $ +# $Licence: MIT or 2-clause/new/simplified BSD Exp $ +# $Version: 2.0 2014/09/09 Exp $ +# $Screenshots: Exp $ +# + +function prompt_clover_help { + cat <<-EOH +usage: prompt clover [options] [color-list: 4|8 colors] + -a, --no-apm disable APM checking + -t, --no-titlebar disable titlebar +EOH +} + +function prompt_clover_precmd { + # Load required function + autoload -Uz vcs_info + + # Define vcs info formats + zstyle ':vcs_info:*' enable bzr hg git svn + zstyle ':vcs_info:*:prompt:*' check-for-changes true + zstyle ':vcs_info:*:prompt:*' unstagedstr '*' + zstyle ':vcs_info:*:prompt:*' actionformats '%a' + zstyle ':vcs_info:*:prompt:*' formats '·%s·%b%u' + zstyle ':vcs_info:*:prompt:*' branchformat '%b' + zstyle ':vcs_info:*:prompt:*' nvcsformats '' + vcs_info 'prompt' + + # Truncate the path if it's too long + local offset width + case $TERM { + (xterm*|*rxvt*) offset=2;; + (linux) offset=1;; + (*) offset=0;; + } + (( width = $COLUMNS - $offset )) + + local promptsize=${#${(%):--(%#·%m/%l·%D{%m/%d}:%H:%M)--(${(%)vcs_info_msg_0_[1,15]})--}} + local pwdsize=${#${(%):-%~}} + + if (( ($promptsize + $pwdsize) > $width )) { + (( prompt_color[len] = $width - $promptsize )) + } else { + prompt_color[fil]=\${(l.$(( $width - $promptsize - $pwdsize ))..$prompt_color[bar].)} + } +} + +function prompt_clover_preexec { + if [[ $TERM == "screen" ]] { + local cmd=${1[(wr)^(*=*|sudo|-*)]} + print -n "\ek$cmd\e\\" + } +} + +function prompt_clover_setup { + typeset -A -g prompt_color + + # Load required function + autoload -Uz add-zsh-hook + + # Add required hook-functions + add-zsh-hook precmd prompt_clover_precmd + add-zsh-hook preexec prompt_clover_preexec + + for (( ; true; )) + case $1 in + (-a|--no-apm) + prompt_color[apm]=false + shift;; + (-t|--no-tilebar) + prompt_color[titlebar]=false + shift;; + (*) break;; + esac + + # Need this so the prompt will work + setopt PROMPT_SUBST + setopt EXTENDED_GLOB + unsetopt KSH_ARRAYS + + # See if we can use colors. + autoload colors zsh/terminfo + if [[ $terminfo[colors] -ge 8 ]] { colors } + typeset -a color_arg + prompt_color[c0]="%{$terminfo[sgr0]%}" + + if [[ $# == 8 ]] && [[ $terminfo[colors] -ge 256 ]] { + for (( i=1; i<=8; i++ )) + prompt_color[c$i]="%{$color[${(L)argv[$i]}]%}" + } elif [[ $# == 4 ]] { + color_arg=($argv[@]) + } else { + color_arg=(blue green magenta red) + } + for (( i=1, j=1; i<=4; i++, j+=2 )) { + prompt_color[c$j]="%{$fg_bold[${(L)color_arg[$i]}]%}" + prompt_color[c$(($j+1))]="%{$fg[${(L)color_arg[$i]}]%}" + } + + # Use extended characters to get a nicer look: + # s=shift u=upper l=lower|left c=corner + typeset -A altchar + set -A altchar ${(s..)terminfo[acsc]} + prompt_color[set]="%{$terminfo[enacs]%}" + prompt_color[s-in]="%{$terminfo[smacs]%}" + prompt_color[s-out]="%{$terminfo[rmacs]%}" + prompt_color[bar]=${altchar[q]:--} + prompt_color[ulc]=${altchar[l]:--} + prompt_color[llc]=${altchar[m]:--} + prompt_color[lrc]=${altchar[j]:--} + prompt_color[urc]=${altchar[k]:--} + unset altchar + + # Decide if we need to set titlebar text + (( $+prompt_color[titlebar] )) || + case $TERM { + (xterm*|*rxvt*) + prompt_color[titlebar]=$'%{\e]0;%#:%m:%y:%~:${COLUMNS}x${LINES}\a%}' + ;; + (screen) + prompt_color[titlebar]=$'%{\e_screen:\005(\005t):%#:%m:%y\a:%~:${COLUMNS}x${LINES}\a\e\\%}' + ;; + (*) + prompt_color[titlebar]='' + ;; + } + + # Decide whether to set a screen title + if [[ $TERM == "screen" ]] { + prompt_color[screen]=$'%{\ekzsh\e\\%}' + } else { + prompt_color[screen]='' + } + + # APM detection + (( $+prompt_color[apm] )) || + if (( $+commands[ibam] )) { + prompt_color[apm]='$prompt_color[c7]${${$(ibam --percentbattery)[(f)1]}[(w)-2]}%%(${${result[(f)3]}[(w)-1]})$prompt_color[c2]·' + } elif (( $+commands[apm] )) { + prompt_color[apm]='$prompt_color[c7]${$(apm)[(w)5,(w)6]/\%:/%%}$prompt_color[c2]·' + } else { prompt_color[apm]='' } + + # Finally, set up the prompt + PROMPT='$prompt_color[set]$prompt_color[screen]${(e)prompt_color[titlebar]}\ +$prompt_color[c6]$prompt_color[s-in]$prompt_color[ulc]$prompt_color[c2]$prompt_color[bar]\ +$prompt_color[s-out]($prompt_color[c5]%(!.$prompt_color[c7].$prompt_color[c3])%#$prompt_color[c5]\ +$prompt_color[c2]·$prompt_color[c5]%m:%l$prompt_color[c2]·$prompt_color[c5]\ +${(e)prompt_color[apm]}$prompt_color[c1]%D{%m/%d}$prompt_color[c6]·%D{%H:%M}$prompt_color[c2])$prompt_color[s-in]\ +$prompt_color[bar]$prompt_color[c5]$prompt_color[bar]${(%e)prompt_color[fil]}\ +$prompt_color[c2]$prompt_color[bar]$prompt_color[s-out]($prompt_color[c5]%\ +$prompt_color[len]<...<%~%<<$prompt_color[c1]${(%)vcs_info_msg_0_[1,15]}$prompt_color[c5]$prompt_color[c2]\ +)$prompt_color[s-in]$prompt_color[bar]$prompt_color[c6]$prompt_color[urc]$prompt_color[s-out] +$prompt_color[c6]$prompt_color[s-in]$prompt_color[llc]$prompt_color[c2]$prompt_color[bar]$prompt_color[s-out]\ +%(!.$prompt_color[c7].$prompt_color[c3])»$prompt_color[c0] ' + + RPROMPT=' %(?..$prompt_color[c2]$prompt_color[s-out]($prompt_color[c7]%?$prompt_color[c2]%))\ +«$prompt_color[s-in]$prompt_color[bar]$prompt_color[c6]$prompt_color[lrc]$prompt_color[s-out]$prompt_color[c0]' + + PS2='$prompt_color[c6]$prompt_color[s-in]$prompt_color[bar]$prompt_color[s-out]\ +$prompt_color[c2]$prompt_color[s-in]$prompt_color[bar]$prompt_color[s-out](\ +$prompt_color[c4]%_$prompt_color[c2])$prompt_color[s-in]$prompt_color[bar]$prompt_color[s-out]\ +$prompt_color[c6]$prompt_color[s-in]$prompt_color[bar]$prompt_color[s-out]$prompt_color[c0] ' +} + +prompt_clover_setup "$@" + +# +# vim:fenc=utf-8:ft=zsh:sts=0:sw=2:ts=2: +#