zshrc: Use %# instead of %% for the `percent' token in the prompt
[grml-etc-core.git] / etc / zsh / zshrc
index 355a944..7eb4e76 100644 (file)
@@ -985,6 +985,17 @@ for rh in run-help{,-git,-svk,-svn}; do
     zrcautoload $rh
 done; unset rh
 
+# command not found handling
+
+(( ${COMMAND_NOT_FOUND} == 1 )) &&
+function command_not_found_handler() {
+    emulate -L zsh
+    if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then
+        ${GRML_ZSH_CNF_HANDLER} $1
+    fi
+    return 1
+}
+
 # completion system
 if zrcautoload compinit ; then
     compinit || print 'Notice: no compinit available :('
@@ -1240,8 +1251,6 @@ PS4='+%N:%i:%_> '
 #    - battery status
 #    - debian_chroot
 #    - vcs_info setup and version specific fixes
-#    - command-not-found handling
-#      (TODO: This has nothing to do with prompts: move!)
 
 # display battery status on right side of prompt via running 'BATTERY=1 zsh'
 if [[ $BATTERY -gt 0 ]] ; then
@@ -1307,17 +1316,6 @@ else
     zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r"
 fi
 
-# command not found handling
-
-(( ${COMMAND_NOT_FOUND} == 1 )) &&
-function command_not_found_handler() {
-    emulate -L zsh
-    if [[ -x ${GRML_ZSH_CNF_HANDLER} ]] ; then
-        ${GRML_ZSH_CNF_HANDLER} $1
-    fi
-    return 1
-}
-
 # Now for the fun part: The grml prompt themes in `promptsys' mode of operation
 
 # This actually defines three prompts:
@@ -1350,8 +1348,9 @@ function prompt_grml_help () {
         - The attributes used with the items are customisable via strings
           used before and after the actual item.
 
-    The available items are: rc, rc-always, change-root, user, at, host, path,
-    vcs, percent, sad-smiley, battery.
+    The available items are: at, battery, change-root, date, grml-chroot,
+    history, host, jobs, newline, path, percent, rc, rc-always, sad-smiley,
+    shell-level, time, user, vcs
 
     The actual configuration is done via zsh's \`zstyle' mechanism. The
     context, that is used while looking up styles is:
@@ -1370,7 +1369,8 @@ function prompt_grml_help () {
 
         - items (list): The list of items used in the prompt. If \`vcs' is
           present in the list, the theme's code invokes \`vcs_info'
-          accordingly. Default: rc user change-root at host path vcs precent
+          accordingly. Default (left): rc change-root user at host path vcs
+          percent; Default (right): sad-smiley
 
     Available styles in 'items:<item>' are: pre, post. These are strings that
     are inserted before (pre) and after (post) the item in question. Thus, the
@@ -1385,6 +1385,37 @@ function prompt_grml_help () {
 __EOF0__
 }
 
+function prompt_grml-chroot_help () {
+    cat <<__EOF0__
+  prompt grml-chroot
+
+    This is a variation of the grml prompt, see: prompt -h grml
+
+    The main difference is the default value of the \`items' style. The rest
+    behaves exactly the same. Here are the defaults for \`grml-chroot':
+
+        - left: grml-chroot user at host path percent
+        - right: (empty list)
+__EOF0__
+}
+
+function prompt_grml-large_help () {
+    cat <<__EOF0__
+  prompt grml-large
+
+    This is a variation of the grml prompt, see: prompt -h grml
+
+    The main difference is the default value of the \`items' style. In
+    particular, this theme uses _two_ lines instead of one with the plain
+    \`grml' theme. The rest behaves exactly the same. Here are the defaults
+    for \`grml-chroot':
+
+        - left: rc jobs history shell-level change-root time date newline user
+                at host path vcs percent
+        - right: sad-smiley
+__EOF0__
+}
+
 function grml_prompt_setup () {
     emulate -L zsh
     autoload -Uz vcs_info
@@ -1412,66 +1443,66 @@ typeset -gA grml_prompt_pre_default \
             grml_prompt_token_default
 
 grml_prompt_pre_default=(
-    rc                '%F{red}'
-    rc-always         ''
-    change-root       ''
-    user              '%B%F{blue}'
     at                ''
+    battery           ' '
+    change-root       ''
+    date              '%F{blue}'
+    grml-chroot       '%F{red}'
+    history           '%F{green}'
     host              ''
-    path              '%b'
-    vcs               ''
+    jobs              '%F{cyan}'
+    newline           ''
+    path              '%B'
     percent           ''
+    rc                '%F{red}'
+    rc-always         ''
     sad-smiley        ''
-    battery           ' '
-    newline           ''
-    jobs              '%F{cyan}'
-    history           '%F{green}'
-    date              '%F{blue}'
-    time              '%F{blue}'
     shell-level       '%F{red}'
-    grml-chroot       '%F{red}'
+    time              '%F{blue}'
+    user              '%B%F{blue}'
+    vcs               ''
 )
 
 grml_prompt_post_default=(
-    rc                '%f'
-    rc-always         ''
-    change-root       ''
-    user              '%f%b'
     at                ''
+    battery           ''
+    change-root       ''
+    date              '%f'
+    grml-chroot       '%f '
+    history           '%f'
     host              ''
-    path              '%B'
-    vcs               ''
+    jobs              '%f'
+    newline           ''
+    path              '%b'
     percent           ''
+    rc                '%f'
+    rc-always         ''
     sad-smiley        ''
-    battery           ''
-    newline           ''
-    jobs              '%f'
-    history           '%f'
-    date              '%f'
-    time              '%f'
     shell-level       '%f'
-    grml-chroot       '%f '
+    time              '%f'
+    user              '%f%b'
+    vcs               ''
 )
 
 grml_prompt_token_default=(
-    rc                '%(?..%? )'
-    rc-always         '%?'
-    change-root       'debian_chroot'
-    user              '%n'
     at                '@'
+    battery           'PERCENT'
+    change-root       'debian_chroot'
+    date              '%D{%Y-%m-%d}'
+    grml-chroot       'GRML_CHROOT'
+    history           '{history#%!} '
     host              '%m '
+    jobs              '[%j running job(s)] '
+    newline           $'\n'
     path              '%40<..<%~%<< '
-    vcs               '0'
-    percent           '%% '
+    percent           '% # '
+    rc                '%(?..%? )'
+    rc-always         '%?'
     sad-smiley        '%(?..:()'
-    battery           'PERCENT'
-    newline           $'\n'
-    jobs              '[%j running job(s)] '
-    history           '{history#%!} '
-    date              '%D{%Y-%m-%d}'
-    time              '%D{%H:%M:%S} '
     shell-level       '%(3L.+ .)'
-    grml-chroot       'GRML_CHROOT'
+    time              '%D{%H:%M:%S} '
+    user              '%n'
+    vcs               '0'
 )
 
 function grml_typeset_and_wrap () {
@@ -1673,29 +1704,23 @@ function grml_vcs_to_screen_title () {
     fi
 }
 
-zrcautoload add-zsh-hook || add-zsh-hook () { :; }
-if [[ $NOPRECMD -gt 0 ]]; then
-    add-zsh-hook precmd grml_reset_screen_title
-    add-zsh-hook precmd grml_vcs_to_screen_title
-fi
-
-# preexec() => a function running before every command
-is4 && [[ $NOPRECMD -eq 0 ]] && \
-preexec () {
-    [[ $NOPRECMD -gt 0 ]] && return 0
-# set hostname if not running on host with name 'grml'
+function grml_maintain_name () {
+    # set hostname if not running on host with name 'grml'
     if [[ -n "$HOSTNAME" ]] && [[ "$HOSTNAME" != $(hostname) ]] ; then
        NAME="@$HOSTNAME"
     fi
-# get the name of the program currently running and hostname of local machine
-# set screen window title if running in a screen
+}
+
+function grml_cmd_to_screen_title () {
+    # get the name of the program currently running and hostname of local
+    # machine set screen window title if running in a screen
     if [[ "$TERM" == screen* ]] ; then
-        # local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]}       # don't use hostname
-        local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME" # use hostname
+        local CMD="${1[(wr)^(*=*|sudo|ssh|-*)]}$NAME"
         ESC_print ${CMD}
     fi
-# adjust title of xterm
-    [[ ${NOTITLE} -gt 0 ]] && return 0
+}
+
+function grml_control_xterm_title () {
     case $TERM in
         (xterm*|rxvt*)
             set_title "${(%):-"%n@%m:"}" "$1"
@@ -1703,6 +1728,17 @@ preexec () {
     esac
 }
 
+zrcautoload add-zsh-hook || add-zsh-hook () { :; }
+if [[ $NOPRECMD -gt 0 ]]; then
+    add-zsh-hook precmd grml_reset_screen_title
+    add-zsh-hook precmd grml_vcs_to_screen_title
+    add-zsh-hook preexec grml_maintain_name
+    add-zsh-hook preexec grml_cmd_to_screen_title
+    if [[ $NOTITLE -eq 0 ]]; then
+        add-zsh-hook preexec grml_control_xterm_title
+    fi
+fi
+
 # 'hash' some often used directories
 #d# start
 hash -d deb=/var/cache/apt/archives