X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=ad40c2e4100776ea5132428f8c39d72fe00666ba;hb=605fb0e77f8abf5d95c6f77f7c9d442296efa403;hp=9682d09199d7e98fc35851769141e40f1bb6e3cc;hpb=9dfd5ff262bda5be5451137645ad430afc9f8ba3;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 9682d09..ad40c2e 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -1350,6 +1350,10 @@ function prompt_grml_setup () { grml_prompt_setup grml } +function prompt_grml-chroot_setup () { + grml_prompt_setup grml-chroot +} + function prompt_grml-large_setup () { grml_prompt_setup grml-large } @@ -1376,6 +1380,7 @@ grml_prompt_pre_default=( date '%F{blue}' time '%F{blue}' shell-level '%F{red}' + grml-chroot '%F{red}' ) grml_prompt_post_default=( @@ -1396,6 +1401,7 @@ grml_prompt_post_default=( date '%f' time '%f' shell-level '%f' + grml-chroot '%f ' ) grml_prompt_token_default=( @@ -1416,6 +1422,7 @@ grml_prompt_token_default=( date '%D{%Y-%m-%d}' time '%D{%H:%M:%S} ' shell-level '%(3L.+ .)' + grml-chroot 'GRML_CHROOT' ) function grml_typeset_and_wrap () { @@ -1455,6 +1462,11 @@ function grml_prompt_addto () { change-root) grml_typeset_and_wrap $target $new '(' ')' ;; + grml-chroot) + if [[ -n ${(P)new} ]]; then + typeset -g "${target}=${(P)target}(CHROOT)" + fi + ;; vcs) v="vcs_info_msg_${new}_" if (( ! vcscalled )); then @@ -1481,6 +1493,16 @@ function prompt_grml_precmd () { prompt_grml_precmd_worker } +function prompt_grml-chroot_precmd () { + emulate -L zsh + local grmltheme=grml-chroot + local -a left_items right_items + left_items=(grml-chroot user at host path percent) + right_items=() + + prompt_grml_precmd_worker +} + function prompt_grml-large_precmd () { emulate -L zsh local grmltheme=grml-large @@ -1509,7 +1531,7 @@ if zrcautoload promptinit && promptinit 2>/dev/null ; then # Since we define the required functions in here and not in files in # $fpath, we need to stick the theme's name into `$prompt_themes' # ourselves, since promptinit does not pick them up otherwise. - prompt_themes+=( grml grml-large ) + prompt_themes+=( grml grml-chroot grml-large ) # Also, keep the array sorted... prompt_themes=( "${(@on)prompt_themes}" ) @@ -1518,20 +1540,43 @@ if zrcautoload promptinit && promptinit 2>/dev/null ; then add-zsh-hook precmd battery fi if [[ "$TERM" == dumb ]] ; then + zstyle ":prompt:grml(|-large|-chroot):*:items:grml-chroot" pre '' + zstyle ":prompt:grml(|-large|-chroot):*:items:grml-chroot" post ' ' for i in rc user path jobs history date time shell-level; do - zstyle ":prompt:grml(|-large):*:items:$i" pre '' - zstyle ':prompt:grml(|-large):*:items:$i' post '' + zstyle ":prompt:grml(|-large|-chroot):*:items:$i" pre '' + zstyle ":prompt:grml(|-large|-chroot):*:items:$i" post '' done unset i - zstyle ':prompt:grml:right:setup' use-rprompt false - elif (( EUID != 0 )); then - zstyle ':prompt:grml:*:items:user' pre '%F{red}' + zstyle ':prompt:grml(|-large|-chroot):right:setup' use-rprompt false + elif (( EUID == 0 )); then + zstyle ':prompt:grml(|-large|-chroot):*:items:user' pre '%F{red}' + fi + + # Finally enable one of the prompts. + if [[ -n $GRML_CHROOT ]]; then + prompt grml-chroot + elif [[ $GRMLPROMPT -gt 0 ]]; then + prompt grml-large + else + prompt grml fi else print 'Notice: no promptinit available :(' -fi -setopt prompt_subst + # Support a fallback, in case promptsys isn't available. + setopt prompt_subst + + precmd() { (( ${+functions[vcs_info]} )) && vcs_info; } + + p0="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}" + p1="${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< "'${vcs_info_msg_0_}'"%# " + if (( EUID == 0 )); then + PROMPT="${BLUE}${p0}${RED}${p1}" + else + PROMPT="${RED}${p0}${BLUE}${p1}" + fi + unset p0 p1 +fi # make sure to use right prompt only when not running a command is41 && setopt transient_rprompt @@ -1619,33 +1664,6 @@ if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then debian_chroot=$(cat /etc/debian_chroot) fi -# don't use colors on dumb terminals (like emacs): -if [[ "$TERM" == dumb ]] ; then - PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< " -else - # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended - # prompt set variable identifying the chroot you work in (used in the - # prompt below) - if [[ $GRMLPROMPT -gt 0 ]] ; then - PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D -${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< " - else - # This assembles the primary prompt string - if (( EUID != 0 )); then - PROMPT="${RED}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${BLUE}%n${NO_COLOR}@%m %40<...<%B%~%b%<< " - else - PROMPT="${BLUE}${EXITCODE}${WHITE}${debian_chroot:+($debian_chroot)}${RED}%n${NO_COLOR}@%m %40<...<%B%~%b%<< " - fi - fi -fi - -PROMPT="${PROMPT}"'${vcs_info_msg_0_}'"%# " - -# if we are inside a grml-chroot set a specific prompt theme -if [[ -n "$GRML_CHROOT" ]] ; then - PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# " -fi - # 'hash' some often used directories #d# start hash -d deb=/var/cache/apt/archives