zshrc: New prompt: Remove old prompt setting scheme
[grml-etc-core.git] / etc / zsh / zshrc
index 9682d09..ad40c2e 100644 (file)
@@ -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