Disable the skel check if running off a cd
[grml-etc-core.git] / etc / zsh / zshrc
index cf15db6..9f3d87a 100644 (file)
@@ -1,4 +1,4 @@
-# Filename:      zshrc
+# Filename:      /etc/zsh/zshrc
 # Purpose:       config file for zsh (z shell)
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 ################################################################################
 
 # zsh-refcard-tag documentation: {{{
-#   You may notice strange looking comments in the zshrc (and ~/.zshrc as
-#   well). These are there for a purpose. grml's zsh-refcard can now be
+#   You may notice strange looking comments in this file.
+#   These are there for a purpose. grml's zsh-refcard can now be
 #   automatically generated from the contents of the actual configuration
-#   files. However, we need a little extra information on which comments
+#   file. However, we need a little extra information on which comments
 #   and what lines of code to take into account (and for what purpose).
 #
 # Here is what they mean:
@@ -91,19 +91,9 @@ if [[ $ZSH_PROFILE_RC -gt 0 ]] ; then
 fi
 # }}}
 
-# setting some default values {{{
-
 # load .zshrc.pre to give the user the chance to overwrite the defaults
 [[ -r ${HOME}/.zshrc.pre ]] && source ${HOME}/.zshrc.pre
 
-NOCOR=${NOCOR:-0}
-NOMENU=${NOMENU:-0}
-NOPRECMD=${NOPRECMD:-0}
-BATTERY=${BATTERY:-0}
-GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
-GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0}
-# }}}
-
 # {{{ check for version/system
 # check for versions (compatibility reasons)
 is4(){
@@ -152,6 +142,11 @@ else
     isgrmlsmall() { return 1 }
 fi
 
+isdarwin(){
+    [[ $OSTYPE == darwin* ]] && return 0
+    return 1
+}
+
 #f1# are we running within an utf environment?
 isutfenv() {
     case "$LANG $CHARSET $LANGUAGE" in
@@ -200,6 +195,118 @@ if ! [[ ${ZSH_VERSION} == 3.1.<7->*      \
     function zstyle() { : }
 fi
 
+# autoload wrapper - use this one instead of autoload directly
+# We need to define this function as early as this, because autoloading
+# 'is-at-least()' needs it.
+function zrcautoload() {
+    setopt local_options extended_glob
+    local fdir ffile
+    local -i ffound
+
+    ffile=${1}
+    (( found = 0 ))
+    for fdir in ${fpath} ; do
+        [[ -e ${fdir}/${ffile} ]] && (( ffound = 1 ))
+    done
+
+    (( ffound == 0 )) && return 1
+    if [[ $ZSH_VERSION == 3.1.<6-> || $ZSH_VERSION == <4->* ]] ; then
+        autoload -U ${ffile} || return 1
+    else
+        autoload ${ffile} || return 1
+    fi
+    return 0
+}
+
+# Load is-at-least() for more precise version checks
+# Note that this test will *always* fail, if the is-at-least
+# function could not be marked for autoloading.
+zrcautoload is-at-least || is-at-least() { return 1 }
+
+# }}}
+
+# setting some default values {{{
+
+NOCOR=${NOCOR:-0}
+NOMENU=${NOMENU:-0}
+NOPRECMD=${NOPRECMD:-0}
+BATTERY=${BATTERY:-0}
+GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
+GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0}
+
+if isgrmlcd ; then
+    GRML_WARN_SKEL=${GRML_WARN_SKEL:-0}
+else
+    GRML_WARN_SKEL=${GRML_WARN_SKEL:-1}
+fi
+
+if (( GRML_WARN_SKEL != 0 )) ; then
+
+function grml_warn_skel_main() {
+    printf '
+Dear user,
+
+You updated grml'\''s zshrc which brings a major change.
+The configuration is kept only in one file, being the global zshrc.
+In the past, the configuration was split in two files, with the
+second file being the .zshrc file from /etc/skel.
+
+If you have a .zshrc file in your home directory that originally
+came from the skel directory, please remove it. This is also the case
+if you followed earlier instructions from the grml-zsh-refcard or
+from <http://grml.org/console/> on non-grml systems.
+
+Please see the current grml-zsh-refcard (available at
+<http://grml.org/zsh/>) for updated installation information. In short,
+you don'\''t want a .zshrc.global file. Install the global zshrc to
+~/.zshrc and be done.
+
+If you need changes to the configuration, use ~/.zshrc.pre and
+~/.zshrc.local.
+
+'
+}
+
+function grml_warn_skel_remove() {
+    printf 'To remove this warning execute '\''grml_do_not_warn_skel'\''.\n\n'
+}
+
+function grml_do_not_warn_skel() {
+    printf '# Do not warn about old skel dot-files anymore\n' >>! ~/.zshrc.pre
+    printf 'GRML_WARN_SKEL=0\n' >>! ~/.zshrc.pre
+}
+
+# let's try to guess how the user uses us.
+if is-at-least 4.3.7 ; then
+    # funcsourcetrace requires at least version 4.3.7 of zsh.
+    GRML_SRC_FILE="${${funcsourcetrace[1]}%:*}"
+
+    grml_warn_skel_main
+    case ${GRML_SRC_FILE} in
+        (${HOME}/.zshrc.global)
+            grml_warn_skel_remove
+            printf '\nIt looks like you copied the grml zshrc to '\''~/.zshrc.global'\''.\n'
+            printf 'Nowadays you just copy the global zshrc to '\''~/.zshrc'\'' to use\n'
+            printf 'it on a non-grml-system.\n'
+            ;;
+        (${HOME}/.zshrc)
+            printf '\nIt looks like you copied the grml zshrc to '\''~/.zshrc'\''.\n'
+            printf 'We'\''ll disable this warning automatically for later sessions.\n'
+            grml_do_not_warn_skel
+            ;;
+        (*)
+            grml_do_not_warn_skel
+            ;;
+    esac
+else
+    grml_warn_skel_main
+    grml_warn_skel_remove
+fi
+
+unfunction grml_warn_skel_remove grml_warn_skel_main
+
+fi # GRML_WARN_SKEL
+
 # }}}
 
 # utility functions {{{
@@ -336,37 +443,8 @@ xunfunction() {
     return 0
 }
 
-# autoload wrapper - use this one instead of autoload directly
-function zrcautoload() {
-    setopt local_options extended_glob
-    local fdir ffile
-    local -i ffound
-
-    ffile=${1}
-    (( found = 0 ))
-    for fdir in ${fpath} ; do
-        [[ -e ${fdir}/${ffile} ]] && (( ffound = 1 ))
-    done
-
-    (( ffound == 0 )) && return 1
-    if [[ $ZSH_VERSION == 3.1.<6-> || $ZSH_VERSION == <4->* ]] ; then
-        autoload -U ${ffile} || return 1
-    else
-        autoload ${ffile} || return 1
-    fi
-    return 0
-}
-
 #}}}
 
-# Load is-at-least() for more precise version checks {{{
-
-# Note that this test will *always* fail, if the is-at-least
-# function could not be marked for autoloading.
-zrcautoload is-at-least || is-at-least() { return 1 }
-
-# }}}
-
 # locale setup {{{
 if [[ -z "$LANG" ]] ; then
    xsource "/etc/default/locale"
@@ -427,12 +505,18 @@ export SHELL='/bin/zsh'
 
 # color setup for ls:
 check_com -c dircolors && eval $(dircolors -b)
-
-# set width of man pages to 80 for more convenient reading
-# export MANWIDTH=${MANWIDTH:-80}
-
-# Search path for the cd command
-#  cdpath=(.. ~)
+# color setup for ls on OS X:
+isdarwin && export CLICOLOR=1
+
+# do MacPorts setup on darwin
+if isdarwin && [[ -d /opt/local ]]; then
+    # Note: PATH gets set in /etc/zprofile on Darwin, so this can't go into
+    # zshenv.
+    PATH="/opt/local/bin:/opt/local/sbin:$PATH"
+    MANPATH="/opt/local/share/man:$MANPATH"
+fi
+# do Fink setup on darwin
+isdarwin && xsource /sw/bin/init.sh
 
 # completion functions go to /etc/zsh/completion.d
 # function files may be put into /etc/zsh/functions.d, from where they
@@ -846,12 +930,6 @@ if is4 && [[ -n ${(k)modules[zsh/complist]} ]] ; then
     #k# menu selection: pick item but stay in the menu
     bindkey -M menuselect '\e^M' accept-and-menu-complete
 
-    # use the vi navigation keys (hjkl) besides cursor keys in menu completion
-    #bindkey -M menuselect 'h' vi-backward-char        # left
-    #bindkey -M menuselect 'k' vi-up-line-or-history   # up
-    #bindkey -M menuselect 'l' vi-forward-char         # right
-    #bindkey -M menuselect 'j' vi-down-line-or-history # bottom
-
     # accept a completion and try to complete again by using menu
     # completion; very useful with completing directories
     # by using 'undo' one's got a simple file browser
@@ -872,26 +950,9 @@ zle -N insert-last-typed-word;
 #k# Insert last typed word
 bindkey "\em" insert-last-typed-word
 
-# set command prediction from history, see 'man 1 zshcontrib'
-#  is4 && zrcautoload predict-on && \
-#  zle -N predict-on         && \
-#  zle -N predict-off        && \
-#  bindkey "^X^Z" predict-on && \
-#  bindkey "^Z" predict-off
-
 #k# Shortcut for \kbd{fg<enter>}
 bindkey -s '^z' "fg\n"
 
-# press ctrl-q to quote line:
-#  mquote () {
-#        zle beginning-of-line
-#        zle forward-word
-#        # RBUFFER="'$RBUFFER'"
-#        RBUFFER=${(q)RBUFFER}
-#        zle end-of-line
-#  }
-#  zle -N mquote && bindkey '^q' mquote
-
 # run command line as user root via sudo:
 sudo-command-line() {
     [[ -z $BUFFER ]] && zle up-history
@@ -936,8 +997,6 @@ is4 && setopt histignorealldups # If  a  new  command  line being added to the h
                             # list duplicates an older one, the older command is removed from the list
 setopt histignorespace      # remove command lines from the history list when
                             # the first character on the line is a space
-#  setopt histallowclobber    # add `|' to output redirections in the history
-#  setopt NO_clobber          # warning if file exists ('cat /dev/null > ~/.zshrc')
 setopt auto_cd              # if a command is issued that can't be executed as a normal command,
                             # and the command is the name of a directory, perform the cd command to that directory
 setopt extended_glob        # in order to use #, ~ and ^ for filename generation
@@ -949,10 +1008,7 @@ setopt notify               # report the status of backgrounds jobs immediately
 setopt hash_list_all        # Whenever a command completion is attempted, make sure \
                             # the entire command path is hashed first.
 setopt completeinword       # not just at the end
-# setopt nocheckjobs          # don't warn me about bg processes when exiting
 setopt nohup                # and don't kill them, either
-# setopt printexitvalue       # alert me if something failed
-# setopt dvorak               # with spelling correction, assume dvorak kb
 setopt auto_pushd           # make cd push the old directory onto the directory stack.
 setopt nonomatch            # try to avoid the 'zsh: no matches found...'
 setopt nobeep               # avoid "beep"ing
@@ -962,12 +1018,6 @@ MAILCHECK=30       # mailchecks
 REPORTTIME=5       # report about cpu-/system-/user-time of command if running longer than 5 seconds
 watch=(notme root) # watch for everyone but me and root
 
-# define word separators (for stuff like backward-word, forward-word, backward-kill-word,..)
-#  WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' # the default
-#  WORDCHARS=.
-#  WORDCHARS='*?_[]~=&;!#$%^(){}'
-#  WORDCHARS='${WORDCHARS:s@/@}'
-
 # only slash should be considered as a word separator:
 slash-backward-kill-word() {
     local WORDCHARS="${WORDCHARS:s@/@}"
@@ -1213,6 +1263,11 @@ zstyle ':vcs_info:*' max-exports 1
 #   disable             - Provide a list of systems, you don't want
 #                         the vcs_info() to check for repositories
 #                         (checked in the 'init' context, too).
+#   disable-patterns    - A list of patterns that are checked against $PWD.
+#                         If the pattern matches, vcs_info will be disabled.
+#                         Say, ~/.zsh is a directory under version control,
+#                         in which you do not want vcs_info to be active, do:
+#                         zstyle ':vcs_info:*' disable-patterns "$HOME/.zsh+(|/*)"
 #   use-simple          - If there are two different ways of gathering
 #                         information, you can select the simpler one
 #                         by setting this style to true; the default
@@ -1233,6 +1288,7 @@ zstyle ':vcs_info:*' max-exports 1
 #   max-exports         2
 #   enable              true
 #   disable             (empty list)
+#   disable-patterns    (empty list)
 #   use-simple          false
 #   use-prompt-escapes  true
 #
@@ -1797,8 +1853,9 @@ vcs_info_lastmsg () { # {{{
 }
 # }}}
 vcs_info () { # {{{
+    local pat
     local -i found
-    local -a VCSs disabled
+    local -a VCSs disabled dps
     local -x vcs usercontext
     local -ax msgs
     local -Ax vcs_comm
@@ -1831,6 +1888,15 @@ vcs_info () { # {{{
         return 0
     }
     zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled
+
+    zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable-patterns" dps
+    for pat in ${dps} ; do
+        if [[ ${PWD} == ${~pat} ]] ; then
+            [[ -n ${vcs_info_msg_0_} ]] && VCS_INFO_set --clear
+            return 0
+        fi
+    done
+
     VCS_INFO_maxexports
 
     (( found = 0 ))
@@ -1992,12 +2058,14 @@ hash -d www=/var/www
 # }}}
 
 # {{{ some aliases
-if [[ $UID -eq 0 ]] ; then
-    [[ -r /etc/grml/screenrc ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc'
-elif [[ -r $HOME/.screenrc ]] ; then
-    alias screen="/usr/bin/screen -c $HOME/.screenrc"
-else
-    [[ -r /etc/grml/screenrc_grml ]] && alias screen='/usr/bin/screen -c /etc/grml/screenrc_grml'
+if check_com -c screen ; then
+    if [[ $UID -eq 0 ]] ; then
+        [[ -r /etc/grml/screenrc ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc"
+    elif [[ -r $HOME/.screenrc ]] ; then
+        alias screen="${commands[screen]} -c $HOME/.screenrc"
+    else
+        [[ -r /etc/grml/screenrc_grml ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc_grml"
+    fi
 fi
 
 # do we have GNU ls with color-support?
@@ -2112,25 +2180,29 @@ zsh-help - hints for use of zsh on grml
 =======================================$reset_color"
 
     print '
-Main configuration of zsh happens in /etc/zsh/zshrc (global)
-and /etc/skel/.zshrc which is copied to $HOME/.zshrc once.
-The files are part of the package grml-etc-core, if you want to
+Main configuration of zsh happens in /etc/zsh/zshrc.
+That file is part of the package grml-etc-core, if you want to
 use them on a non-grml-system just get the tar.gz from
-http://deb.grml.org/ or get the files from the mercurial
-repository:
+http://deb.grml.org/ or (preferably) get it from the git repository:
 
-  http://git.grml.org/?p=grml-etc-core.git;a=blob_plain;f=etc/zsh/zshrc
-  http://git.grml.org/?p=grml-etc-core.git;a=blob_plain;f=etc/skel/.zshrc
+  http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
 
-If you want to stay in sync with zsh configuration of grml
-run '\''ln -sf /etc/skel/.zshrc $HOME/.zshrc'\'' and configure
-your own stuff in $HOME/.zshrc.local. System wide configuration
-without touching configuration files of grml can take place
-in /etc/zsh/zshrc.local.
+This version of grml'\''s zsh setup does not use skel/.zshrc anymore.
+The file is still there, but it is empty for backwards compatibility.
 
-If you want to use the configuration of user grml also when
-running as user root just run '\''zshskel'\'' which will source
-the file /etc/skel/.zshrc.
+For your own changes use these two files:
+    $HOME/.zshrc.pre
+    $HOME/.zshrc.local
+
+The former is sourced very early in our zshrc, the latter is sourced
+very lately.
+
+System wide configuration without touching configuration files of grml
+can take place in /etc/zsh/zshrc.local.
+
+Normally, the root user (EUID == 0) does not get the whole grml setup.
+If you want to force the whole setup for that user, too, set
+GRML_ALWAYS_LOAD_ALL=1 in .zshrc.pre in root'\''s home directory.
 
 For information regarding zsh start at http://grml.org/zsh/
 
@@ -2155,7 +2227,7 @@ the zsh yet. :)
 
 A value greater than 0 is enables a feature; a value equal to zero
 disables it. If you like one or the other of these settings, you can
-add them to ~/.zshenv to ensure they are set when sourcing grml'\''s
+add them to ~/.zshrc.pre to ensure they are set when sourcing grml'\''s
 zshrc.'
 
     print "
@@ -2217,8 +2289,6 @@ if [[ -r /etc/debian_version ]] ; then
     alias llog="$PAGER /var/log/syslog"     # take a look at the syslog
     #a1# Take a look at the syslog: \kbd{tail -f /var/log/syslog}
     alias tlog="tail -f /var/log/syslog"    # follow the syslog
-    #a1# (Re)-source \kbd{/etc/skel/.zshrc}
-    alias zshskel="source /etc/skel/.zshrc" # source skeleton zshrc
 fi
 
 # sort installed Debian-packages by size
@@ -2277,7 +2347,7 @@ limit -s
 # {{{ completion system
 
 # called later (via is4 && grmlcomp)
-# notice: use 'zstyle' for getting current settings
+# note: use 'zstyle' for getting current settings
 #         press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
 grmlcomp() {
     # TODO: This could use some additional information
@@ -2366,6 +2436,9 @@ grmlcomp() {
     zstyle ':completion:*:manuals.*'  insert-sections   true
     zstyle ':completion:*:man:*'      menu yes select
 
+    # provide .. as a completion
+    zstyle ':completion:*' special-dirs ..
+
     # run rehash on completion so new installed program are found automatically:
     _force_rehash() {
         (( CURRENT == 1 )) && rehash
@@ -2393,12 +2466,6 @@ grmlcomp() {
             fi'
     fi
 
-    # zstyle ':completion:*' completer _complete _correct _approximate
-    # zstyle ':completion:*' expand prefix suffix
-
-    # complete shell aliases
-    # zstyle ':completion:*' completer _expand_alias _complete _approximate
-
     # command for process lists, the local web server details and host completion
     zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html'
 
@@ -2422,30 +2489,9 @@ grmlcomp() {
         localhost
     )
     zstyle ':completion:*:hosts' hosts $hosts
+    # TODO: so, why is this here?
     #  zstyle '*' hosts $hosts
 
-    # specify your logins:
-    # my_accounts=(
-    #  {grml,grml1}@foo.invalid
-    #  grml-devel@bar.invalid
-    # )
-    # other_accounts=(
-    #  {fred,root}@foo.invalid
-    #  vera@bar.invalid
-    # )
-    # zstyle ':completion:*:my-accounts' users-hosts $my_accounts
-    # zstyle ':completion:*:other-accounts' users-hosts $other_accounts
-
-    # specify specific port/service settings:
-    #  telnet_users_hosts_ports=(
-    #    user1@host1:
-    #    user2@host2:
-    #    @mail-server:{smtp,pop3}
-    #    @news-server:nntp
-    #    @proxy-server:8000
-    #  )
-    # zstyle ':completion:*:*:telnet:*' users-hosts-ports $telnet_users_hosts_ports
-
     # use generic completion system for programs not yet defined; (_gnu_generic works
     # with commands that provide a --help option with "standard" gnu-like output.)
     compdef _gnu_generic tail head feh cp mv df stow uname ipacsum fetchipac
@@ -2564,9 +2610,6 @@ if check_com qma ; then
     compdef _man qma
 else
     manzsh()  { /usr/bin/man zshall |  vim -c "se ft=man| se hlsearch" +/"$1" - ; }
-    # manzsh()  { /usr/bin/man zshall |  most +/"$1" ; }
-    # [[ -f ~/.terminfo/m/mostlike ]] && MYLESS='LESS=C TERMINFO=~/.terminfo TERM=mostlike less' || MYLESS='less'
-    # manzsh()  { man zshall | $MYLESS -p $1 ; }
 fi
 
 if check_com -c $PAGER ; then
@@ -2837,14 +2880,6 @@ bk() {
     cp -a "$1" "${1}_$(date --iso-8601=seconds)"
 }
 
-# Switching shell safely and efficiently? http://www.zsh.org/mla/workers/2001/msg02410.html
-# bash() {
-#  NO_SWITCH="yes" command bash "$@"
-# }
-# restart () {
-#  exec $SHELL $SHELL_ARGS "$@"
-# }
-
 #f1# grep for patterns in grml's zsh setup
 zg() {
 #{{{
@@ -2904,21 +2939,12 @@ exit 0;
 
 # }}}
 
-# log out? set timeout in seconds {{{
-# TMOUT=1800
-# do not log out in some specific terminals:
-#  if [[ "${TERM}" == ([Exa]term*|rxvt|dtterm|screen*) ]] ; then
-#    unset TMOUT
-#  fi
-# }}}
-
 # {{{ make sure our environment is clean regarding colors
 for color in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $color
 # }}}
 
 # source another config file if present {{{
 xsource "/etc/zsh/zshrc.local"
-xsource "${HOME}/.zshenv"
 # }}}
 
 # "persistent history" {{{
@@ -2928,23 +2954,12 @@ if [[ -r ~/.important_commands ]] ; then
 fi
 # }}}
 
-## genrefcard.pl settings {{{
-### example: split functions-search 8,16,24,32
-#@# split functions-search 8
-## }}}
-
 #:grep:marker:for:mika: :-)
 ### non-root (EUID != 0) code below
 ###
 
 (( GRML_ALWAYS_LOAD_ALL == 0 )) && (( $EUID == 0 )) && return 0
 
-# autoloading stuff {{{
-# associate types and extensions (be aware with perl scripts and anwanted behaviour!)
-#  check_com zsh-mime-setup || { autoload zsh-mime-setup && zsh-mime-setup }
-#  alias -s pl='perl -S'
-# }}}
-
 # variables {{{
 
 # set terminal property (used e.g. by msgid-chooser)
@@ -2970,46 +2985,6 @@ fi
 [[ -f /usr/share/classpath/glibj.zip ]] && export JIKESPATH=/usr/share/classpath/glibj.zip
 # }}}
 
-# set options {{{
-
-# Allow comments even in interactive shells i. e.
-# $ uname # This command prints system informations
-# zsh: bad pattern: #
-# $ setopt interactivecomments
-# $ uname # This command prints system informations
-# Linux
-#  setopt interactivecomments
-
-# ctrl-s will no longer freeze the terminal.
-#  stty erase "^?"
-
-# }}}
-
-# {{{ global aliases
-# These do not have to be at the beginning of the command line.
-# Avoid typing cd ../../ for going two dirs down and so on
-# Usage, e.g.: "$ cd ...' or just '$ ...' with 'setopt auto_cd'
-# Notice: deactivated by 061112 by default, we use another approach
-# known as "power completion / abbreviation expansion"
-#  alias -g '...'='../..'
-#  alias -g '....'='../../..'
-#  alias -g BG='& exit'
-#  alias -g C='|wc -l'
-#  alias -g G='|grep'
-#  alias -g H='|head'
-#  alias -g Hl=' --help |& less -r'
-#  alias -g K='|keep'
-#  alias -g L='|less'
-#  alias -g LL='|& less -r'
-#  alias -g M='|most'
-#  alias -g N='&>/dev/null'
-#  alias -g R='| tr A-z N-za-m'
-#  alias -g SL='| sort | less'
-#  alias -g S='| sort'
-#  alias -g T='|tail'
-#  alias -g V='| vim -'
-# }}}
-
 # aliases {{{
 
 # Xterm resizing-fu.
@@ -3023,16 +2998,12 @@ alias large='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso88
 alias huge='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"'
 alias smartfont='echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"'
 alias semifont='echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"'
-#  if [[ "$TERM" == "xterm" ]] && [[ "$LINES" -ge 50 ]] && [[ "$COLUMNS" -ge 100 ]] && [[ -z "$SSH_CONNECTION" ]] ; then
-#          large
-#  fi
 
 # general
 #a2# Execute \kbd{du -sch}
 alias da='du -sch'
 #a2# Execute \kbd{jobs -l}
 alias j='jobs -l'
-#  alias u='translate -i'          # translate
 
 # compile stuff
 #a2# Execute \kbd{./configure}
@@ -3041,6 +3012,7 @@ alias CO="./configure"
 alias CH="./configure --help"
 
 # http://conkeror.mozdev.org/
+# TODO: I think this should be removed, as conkeror is not a simple extension anymore
 #a2# Run a keyboard driven firefox
 alias conkeror='firefox -chrome chrome://conkeror/content'
 
@@ -3110,8 +3082,6 @@ alias fbmplayer='mplayer -vo fbdev -fs -zoom'
 #a2# Execute \kbd{links2 -driver fb}
 alias fblinks='links2 -driver fb'
 
-# ignore ~/.ssh/known_hosts entries
-#  alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "PreferredAuthentications=keyboard-interactive"'
 #a2# ssh with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset
 alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
 alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"'
@@ -3328,13 +3298,12 @@ alias GREP='grep -i --color=auto'
 
 # one blank line between each line
 if [[ -r ~/.terminfo/m/mostlike ]] ; then
-#   alias man2='MANPAGER="sed -e G |less" TERMINFO=~/.terminfo TERM=mostlike /usr/bin/man'
     #f5# Watch manpages in a stretched style
     man2() { PAGER='dash -c "sed G | /usr/bin/less"' TERM=mostlike /usr/bin/man "$@" ; }
 fi
 
 # d():Copyright 2005 Nikolai Weibull <nikolai@bitwi.se>
-# notice: option AUTO_PUSHD has to be set
+# note: option AUTO_PUSHD has to be set
 #f5# Jump between directories
 d() {
     emulate -L zsh
@@ -3409,22 +3378,6 @@ trans() {
     esac
 }
 
-# Some quick Perl-hacks aka /useful/ oneliner
-#  bew() { perl -le 'print unpack "B*","'$1'"' }
-#  web() { perl -le 'print pack "B*","'$1'"' }
-#  hew() { perl -le 'print unpack "H*","'$1'"' }
-#  weh() { perl -le 'print pack "H*","'$1'"' }
-#  pversion()    { perl -M$1 -le "print $1->VERSION" } # i. e."pversion LWP -> 5.79"
-#  getlinks ()   { perl -ne 'while ( m/"((www|ftp|http):\/\/.*?)"/gc ) { print $1, "\n"; }' $* }
-#  gethrefs ()   { perl -ne 'while ( m/href="([^"]*)"/gc ) { print $1, "\n"; }' $* }
-#  getanames ()  { perl -ne 'while ( m/a name="([^"]*)"/gc ) { print $1, "\n"; }' $* }
-#  getforms ()   { perl -ne 'while ( m:(\</?(input|form|select|option).*?\>):gic ) { print $1, "\n"; }' $* }
-#  getstrings () { perl -ne 'while ( m/"(.*?)"/gc ) { print $1, "\n"; }' $*}
-#  getanchors () { perl -ne 'while ( m/«([^«»\n]+)»/gc ) { print $1, "\n"; }' $* }
-#  showINC ()    { perl -e 'for (@INC) { printf "%d %s\n", $i++, $_ }' }
-#  vimpm ()      { vim `perldoc -l $1 | sed -e 's/pod$/pm/'` }
-#  vimhelp ()    { vim -c "help $1" -c on -c "au! VimEnter *" }
-
 #f5# List all occurrences of programm in current PATH
 plap() {
     if [[ $# = 0 ]] ; then
@@ -3614,7 +3567,7 @@ status() {
     print ""
     print "Date..: "$(date "+%Y-%m-%d %H:%M:%S")""
     print "Shell.: Zsh $ZSH_VERSION (PID = $$, $SHLVL nests)"
-    print "Term..: $TTY ($TERM), $BAUD bauds, $COLUMNS x $LINES cars"
+    print "Term..: $TTY ($TERM), ${BAUD:+$BAUD bauds, }$COLUMNS x $LINES cars"
     print "Login.: $LOGNAME (UID = $EUID) on $HOST"
     print "System: $(cat /etc/[A-Za-z]*[_-][rv]e[lr]*)"
     print "Uptime:$(uptime)"
@@ -3887,16 +3840,21 @@ mkmaildir() {
     mkdir -p ${root}/${subdir}/{cur,new,tmp}
 }
 
-# xtrename() rename xterm from within GNU-screen
+#f5# Change the xterm title from within GNU-screen
 xtrename() {
-    if [[ -z ${DISPLAY} ]] ; then
-        printf 'xtrename only makes sense in X11.\n'
-        return 1
+    if [[ ${1} != "-f" ]] ; then
+        if [[ -z ${DISPLAY} ]] ; then
+            printf 'xtrename only makes sense in X11.\n'
+            return 1
+        fi
+    else
+        shift
     fi
     if [[ -z ${1} ]] ; then
-        printf 'usage: xtrename() "title for xterm"\n'
+        printf 'usage: xtrename [-f] "title for xterm"\n'
         printf '  renames the title of xterm from _within_ screen.\n'
-        printf '  Also works without screen.\n'
+        printf '  also works without screen.\n'
+        printf '  will not work if DISPLAY is unset, use -f to override.\n'
         return 0
     fi
     print -n "\eP\e]0;${1}\C-G\e\\"
@@ -4186,6 +4144,7 @@ gethgsnap() {
 # }}}
 
 # some useful commands often hard to remember - let's grep for them {{{
+# actually use our zg() function now. :)
 
 # Work around ion/xterm resize bug.
 #if [[ "$SHLVL" -eq 1 ]]; then
@@ -4266,9 +4225,15 @@ xsource "${HOME}/.zshrc.local"
 
 # }}}
 
-### doc strings for external functions from files {{{
+## genrefcard.pl settings {{{
+
+### doc strings for external functions from files
 #m# f5 grml-wallpaper() Sets a wallpaper (try completion for possible values)
-#}}}
+
+### example: split functions-search 8,16,24,32
+#@# split functions-search 8
+
+## }}}
 
 ## END OF FILE #################################################################
 # vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4