-_bkdate() { BUFFER="$BUFFER$(date '+%F')"; CURSOR=$#BUFFER; }
-zle -N _bkdate
-
-#k# Insert a timestamp on the command line (yyyy-mm-dd)
-bindkey '^Ed' _bkdate
-
-# press esc-m for inserting last typed word again (thanks to caphuso!)
-insert-last-typed-word() { zle insert-last-word -- 0 -1 };
-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
- [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
-}
-zle -N sudo-command-line
-
-#k# Put the current command line into a \kbd{sudo} call
-bindkey "^Os" sudo-command-line
-
-### jump behind the first word on the cmdline.
-### useful to add options.
-function jump_after_first_word() {
- local words
- words=(${(z)BUFFER})
-
- if (( ${#words} <= 1 )) ; then
- CURSOR=${#BUFFER}
- else
- CURSOR=${#${words[1]}}
- fi
-}
-zle -N jump_after_first_word
-
-bindkey '^x1' jump_after_first_word
-
-# }}}
-
-# {{{ set some important options
-# Please update these tags, if you change the umask settings below.
-#o# r_umask 002
-#o# r_umaskstr rwxrwxr-x
-#o# umask 022
-#o# umaskstr rwxr-xr-x
-(( EUID != 0 )) && umask 002 || umask 022
-
-# history:
-setopt append_history # append history list to the history file (important for multiple parallel zsh sessions!)
-is4 && setopt SHARE_HISTORY # import new commands from the history file also in other zsh-session
-setopt extended_history # save each command's beginning timestamp and the duration to the history file
-is4 && setopt histignorealldups # If a new command line being added to the history
- # 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
- # grep word *~(*.gz|*.bz|*.bz2|*.zip|*.Z) ->
- # -> searches for word not in compressed files
- # don't forget to quote '^', '~' and '#'!
-setopt longlistjobs # display PID when suspending processes as well
-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
-setopt pushd_ignore_dups # don't push the same dir twice.
-
-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@/@}"
- # zle backward-word
- zle backward-kill-word
-}
-zle -N slash-backward-kill-word
-
-#k# Kill everything in a word up to its last \kbd{/}
-bindkey '\ev' slash-backward-kill-word
-
-# }}}
-
-# {{{ history
-
-ZSHDIR=$HOME/.zsh
-
-#v#
-HISTFILE=$HOME/.zsh_history
-isgrmlcd && HISTSIZE=500 || HISTSIZE=5000
-isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history
-
-# }}}
-
-# dirstack handling {{{
-
-DIRSTACKSIZE=${DIRSTACKSIZE:-20}
-DIRSTACKFILE=${DIRSTACKFILE:-${HOME}/.zdirs}
-
-if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then
- dirstack=( ${(f)"$(< $DIRSTACKFILE)"} )
- # "cd -" won't work after login by just setting $OLDPWD, so
- [[ -d $dirstack[0] ]] && cd $dirstack[0] && cd $OLDPWD
-fi
-
-chpwd() {
- if is42 ; then
- builtin print -l ${(u)dirstack} >! ${DIRSTACKFILE}
- else
- uprint dirstack >! ${DIRSTACKFILE}
- fi
-}
-
-# }}}
-
-# {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh'
-if [[ $BATTERY -gt 0 ]] ; then
- if ! check_com -c acpi ; then
- BATTERY=0
- fi
-fi
-
-battery() {
-if [[ $BATTERY -gt 0 ]] ; then
- PERCENT="${${"$(acpi 2>/dev/null)"}/(#b)[[:space:]]##Battery <->: [^0-9]##, (<->)%*/${match[1]}}"
- if [[ -z "$PERCENT" ]] ; then
- PERCENT='acpi not present'
- else
- if [[ "$PERCENT" -lt 20 ]] ; then
- PERCENT="warning: ${PERCENT}%%"
- else
- PERCENT="${PERCENT}%%"
- fi
- fi
-fi
-}
-# }}}
-
-# set colors for use in prompts {{{
-if zrcautoload colors && colors 2>/dev/null ; then
- BLUE="%{${fg[blue]}%}"
- RED="%{${fg_bold[red]}%}"
- GREEN="%{${fg[green]}%}"
- CYAN="%{${fg[cyan]}%}"
- MAGENTA="%{${fg[magenta]}%}"
- YELLOW="%{${fg[yellow]}%}"
- WHITE="%{${fg[white]}%}"
- NO_COLOUR="%{${reset_color}%}"
-else
- BLUE=$'%{\e[1;34m%}'
- RED=$'%{\e[1;31m%}'
- GREEN=$'%{\e[1;32m%}'
- CYAN=$'%{\e[1;36m%}'
- WHITE=$'%{\e[1;37m%}'
- MAGENTA=$'%{\e[1;35m%}'
- YELLOW=$'%{\e[1;33m%}'
- NO_COLOUR=$'%{\e[0m%}'
-fi
-
-# }}}
-
-# gather version control information for inclusion in a prompt {{{
-
-if ! is41 ; then
- # Be quiet about version problems in grml's zshrc as the user cannot disable
- # loading vcs_info() as it is *in* the zshrc - as you can see. :-)
- # Just unset most probable variables and disable vcs_info altogether.
- local -i i
- for i in {0..9} ; do
- unset VCS_INFO_message_${i}_
- done
- zstyle ':vcs_info:*' enable false
-fi
-
-# The following code is imported from the file 'zsh/functions/vcs_info'
-# from <http://ft.bewatermyfriend.org/comp/zsh/zsh-dotfiles.tar.bz2>,
-# which distributed under the same terms as zsh itself.
-
-# we will only be using one variable, so let the code know now.
-zstyle ':vcs_info:*' max-exports 1
-
-# vcs_info() documentation:
-#{{{
-# REQUIREMENTS:
-#{{{
-# This functionality requires zsh version >= 4.1.*.
-#}}}
-#
-# LOADING:
-#{{{
-# To load vcs_info(), copy this file to your $fpath[] and do:
-# % autoload -Uz vcs_info && vcs_info
-#
-# To work, vcs_info() needs 'setopt prompt_subst' in your setup.
-#}}}
-#
-# QUICKSTART:
-#{{{
-# To get vcs_info() working quickly (including colors), you can do the
-# following (assuming, you loaded vcs_info() properly - see above):
-#
-# % RED=$'%{\e[31m%}'
-# % GR=$'%{\e[32m%}'
-# % MA=$'%{\e[35m%}'
-# % YE=$'%{\e[33m%}'
-# % NC=$'%{\e[0m%}'
-#
-# % zstyle ':vcs_info:*' actionformats \
-# "${MA}(${NC}%s${MA})${YE}-${MA}[${GR}%b${YE}|${RED}%a${MA}]${NC} "
-#
-# % zstyle ':vcs_info:*' formats \
-# "${MA}(${NC}%s${MA})${Y}-${MA}[${GR}%b${MA}]${NC}%} "
-#
-# % zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YE}%r"
-#
-# % precmd () { vcs_info }
-# % PS1='${MA}[${GR}%n${MA}] ${MA}(${RED}%!${MA}) ${YE}%3~ ${VCS_INFO_message_0_}${NC}%# '
-#
-# Obviously, the las two lines are there for demonstration: You need to
-# call vcs_info() from your precmd() function (see 'SPECIAL FUNCTIONS' in
-# 'man zshmisc'). Once that is done you need a *single* quoted
-# '${VCS_INFO_message_0_}' in your prompt.
-#
-# Now call the 'vcs_info_printsys' utility from the command line:
-#
-# % vcs_info_printsys
-# # list of supported version control backends:
-# # disabled systems are prefixed by a hash sign (#)
-# git
-# hg
-# bzr
-# darcs
-# svk
-# mtn
-# svn
-# cvs
-# cdv
-# tla
-# # flavours (cannot be used in the disable style; they
-# # are disabled with their master [git-svn -> git]):
-# git-p4
-# git-svn
-#
-# Ten version control backends as you can see. You may not want all
-# of these. Because there is no point in running the code to detect
-# systems you do not use. ever. So, there is a way to disable some
-# backends altogether:
-#
-# % zstyle ':vcs_info:*' disable bzr cdv darcs mtn svk tla
-#
-# If you rerun 'vcs_info_printsys' now, you will see the backends listed
-# in the 'disable' style marked as diabled by a hash sign. That means the
-# detection of these systems is skipped *completely*. No wasted time there.
-#
-# For more control, read the reference below.
-#}}}
-#
-# CONFIGURATION:
-#{{{
-# The vcs_info() feature can be configured via zstyle.
-#
-# First, the context in which we are working:
-# :vcs_info:<vcs-string>:<user-context>
-#
-# ...where <vcs-string> is one of:
-# - git, git-svn, git-p4, hg, darcs, bzr, cdv, mtn, svn, cvs, svk or tla.
-#
-# ...and <user-context> is a freely configurable string, assignable by the
-# user as the first argument to vcs_info() (see its description below).
-#
-# There is are three special values for <vcs-string>: The first is named
-# 'init', that is in effect as long as there was no decision what vcs
-# backend to use. The second is 'preinit; it is used *before* vcs_info()
-# is run, when initializing the data exporting variables. The third
-# special value is 'formats' and is used by the 'vcs_info_lastmsg' for
-# looking up its styles.
-#
-# There are two pre-defined values for <user-context>:
-# default - the one used if none is specified
-# command - used by vcs_info_lastmsg to lookup its styles.
-#
-# You may *not* use 'print_systems_' as a user-context string, because it
-# is used internally.
-#
-# You can of course use ':vcs_info:*' to match all VCSs in all
-# user-contexts at once.
-#
-# Another special context is 'formats', which is used by the
-# vcs_info_lastmsg() utility function (see below).
-#
-#
-# This is a description of all styles, that are looked up:
-# formats - A list of formats, used when actionformats is not
-# used (which is most of the time).
-# actionformats - A list of formats, used if a there is a special
-# action going on in your current repository;
-# (like an interactive rebase or a merge conflict)
-# branchformat - Some backends replace %b in the formats and
-# actionformats styles above, not only by a branch
-# name but also by a revision number. This style
-# let's you modify how that string should look like.
-# nvcsformats - These "formats" are exported, when we didn't detect
-# a version control system for the current directory.
-# This is useful, if you want vcs_info() to completely
-# take over the generation of your prompt.
-# You would do something like
-# PS1='${VCS_INFO_message_0_}'
-# to accomplish that.
-# max-exports - Defines the maximum number if VCS_INFO_message_*_
-# variables vcs_info() will export.
-# enable - Checked in the 'init' context. If set to false,
-# vcs_info() will do nothing.
-# disable - Provide a list of systems, you don't want
-# the vcs_info() to check for repositories
-# (checked in the 'init' context, too).
-# 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
-# is to use the not-that-simple code, which is
-# potentially a lot slower but might be more
-# accurate in all possible cases.
-# use-prompt-escapes - determines if we assume that the assembled
-# string from vcs_info() includes prompt escapes.
-# (Used by vcs_info_lastmsg().
-#
-# The use-simple style is only available for the bzr backend.
-#
-# The default values for these in all contexts are:
-# formats " (%s)-[%b|%a]-"
-# actionformats " (%s)-[%b]-"
-# branchformat "%b:%r" (for bzr, svn and svk)
-# nvcsformats ""
-# max-exports 2
-# enable true
-# disable (empty list)
-# use-simple false
-# use-prompt-escapes true
-#
-#
-# In normal formats and actionformats, the following replacements
-# are done:
-# %s - The vcs in use (git, hg, svn etc.)
-# %b - Information about the current branch.
-# %a - An identifier, that describes the action.
-# Only makes sense in actionformats.
-# %R - base directory of the repository.
-# %r - repository name
-# If %R is '/foo/bar/repoXY', %r is 'repoXY'.
-# %S - subdirectory within a repository. if $PWD is
-# '/foo/bar/reposXY/beer/tasty', %S is 'beer/tasty'.
-#
-#
-# In branchformat these replacements are done:
-# %b - the branch name
-# %r - the current revision number
-#
-# Not all vcs backends have to support all replacements.
-# nvcsformat does not perform *any* replacements. It is just a string.
-#}}}
-#
-# ODDITIES:
-#{{{
-# If you want to use the %b (bold off) prompt expansion in 'formats', which
-# expands %b itself, use %%b. That will cause the vcs_info() expansion to
-# replace %%b with %b. So zsh's prompt expansion mechanism can handle it.
-# Similarly, to hand down %b from branchformat, use %%%%b. Sorry for this
-# inconvenience, but it cannot be easily avoided. Luckily we do not clash
-# with a lot of prompt expansions and this only needs to be done for those.
-# See 'man zshmisc' for details about EXPANSION OF PROMPT SEQUENCES.
-#}}}
-#
-# FUNCTION DESCRIPTIONS (public API):
-#{{{
-# vcs_info()
-# The main function, that runs all backends and assembles
-# all data into ${VCS_INFO_message_*_}. This is the function
-# you want to call from precmd() if you want to include
-# up-to-date information in your prompt (see VARIABLE
-# DESCRIPTION below).
-#
-# vcs_info_printsys()
-# Prints a list of all supported version control systems.
-# Useful to find out possible contexts (and which of them are enabled)
-# or values for the 'disable' style.
-#
-# vcs_info_lastmsg()
-# Outputs the last ${VCS_INFO_message_*_} value. Takes into account
-# the value of the use-prompt-escapes style in ':vcs_info:formats'.
-# It also only prints max-exports values.
-#
-# All functions named VCS_INFO_* are for internal use only.
-#}}}
-#
-# VARIABLE DESCRIPTION:
-#{{{
-# ${VCS_INFO_message_N_} (Note the trailing underscore)
-# Where 'N' is an integer, eg: VCS_INFO_message_0_
-# These variables are the storage for the informational message the
-# last vcs_info() call has assembled. These are strongly connected
-# to the formats, actionformats and nvcsformats styles described
-# above. Those styles are lists. the first member of that list gets
-# expanded into ${VCS_INFO_message_0_}, the second into
-# ${VCS_INFO_message_1_} and the Nth into ${VCS_INFO_message_N-1_}.
-# These parameters are exported into the environment.
-# (See the max-exports style above.)
-#}}}
-#
-# EXAMPLES:
-#{{{
-# Don't use vcs_info at all (even though it's in your prompt):
-# % zstyle ':vcs_info:*' enable false
-#
-# Disable the backends for bzr and svk:
-# % zstyle ':vcs_info:*' disable bzr svk
-#
-# Provide a special formats for git:
-# % zstyle ':vcs_info:git:*' formats ' GIT, BABY! [%b]'
-# % zstyle ':vcs_info:git:*' actionformats ' GIT ACTION! [%b|%a]'
-#
-# Use the quicker bzr backend (if you do, please report if it does
-# the-right-thing[tm] - thanks):
-# % zstyle ':vcs_info:bzr:*' use-simple true
-#
-# Display the revision number in yellow for bzr and svn:
-# % zstyle ':vcs_info:(svn|bzr):*' branchformat '%b%{'${fg[yellow]}'%}:%r'
-#
-# If you want colors, make sure you enclose the color codes in %{...%},
-# if you want to use the string provided by vcs_info() in prompts.
-#
-# Here is how to print the vcs infomation as a command:
-# % alias vcsi='vcs_info command; vcs_info_lastmsg'
-#
-# This way, you can even define different formats for output via
-# vcs_info_lastmsg() in the ':vcs_info:command:*' namespace.
-#}}}
-#}}}
-# utilities
-VCS_INFO_adjust () { #{{{
- [[ -n ${vcs_comm[overwrite_name]} ]] && vcs=${vcs_comm[overwrite_name]}
- return 0
-}
-# }}}
-VCS_INFO_check_com () { #{{{
- (( ${+commands[$1]} )) && [[ -x ${commands[$1]} ]] && return 0
- return 1
-}
-# }}}
-VCS_INFO_formats () { # {{{
- setopt localoptions noksharrays
- local action=$1 branch=$2 base=$3
- local msg
- local -i i
-
- if [[ -n ${action} ]] ; then
- zstyle -a ":vcs_info:${vcs}:${usercontext}" actionformats msgs
- (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b|%a]-'
- else
- zstyle -a ":vcs_info:${vcs}:${usercontext}" formats msgs
- (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b]-'
- fi
-
- (( ${#msgs} > maxexports )) && msgs[${maxexports},-1]=()
- for i in {1..${#msgs}} ; do
- zformat -f msg ${msgs[$i]} a:${action} b:${branch} s:${vcs} r:${base:t} R:${base} S:"$(VCS_INFO_reposub ${base})"
- msgs[$i]=${msg}
- done
- return 0
-}
-# }}}
-VCS_INFO_maxexports () { #{{{
- local -ix maxexports
-
- zstyle -s ":vcs_info:${vcs}:${usercontext}" "max-exports" maxexports || maxexports=2
- if [[ ${maxexports} != <-> ]] || (( maxexports < 1 )); then
- printf 'vcs_info(): expecting numeric arg >= 1 for max-exports (got %s).\n' ${maxexports}
- printf 'Defaulting to 2.\n'
- maxexports=2
- fi
-}
-# }}}
-VCS_INFO_nvcsformats () { #{{{
- setopt localoptions noksharrays
- local c v
-
- if [[ $1 == 'preinit' ]] ; then
- c=default
- v=preinit
- fi
- zstyle -a ":vcs_info:${v:-$vcs}:${c:-$usercontext}" nvcsformats msgs
- (( ${#msgs} > maxexports )) && msgs[${maxexports},-1]=()
-}
-# }}}
-VCS_INFO_realpath () { #{{{
- # a portable 'readlink -f'
- # forcing a subshell, to ensure chpwd() is not removed
- # from the calling shell (if VCS_INFO_realpath() is called
- # manually).
- (
- (( ${+functions[chpwd]} )) && unfunction chpwd
- setopt chaselinks
- cd $1 2>/dev/null && pwd
- )
-}
-# }}}
-VCS_INFO_reposub () { #{{{
- setopt localoptions extendedglob
- local base=${1%%/##}
-
- [[ ${PWD} == ${base}/* ]] || {
- printf '.'
- return 1
- }
- printf '%s' ${PWD#$base/}
- return 0
-}
-# }}}
-VCS_INFO_set () { #{{{
- setopt localoptions noksharrays
- local -i i j
-
- if [[ $1 == '--clear' ]] ; then
- for i in {0..9} ; do
- unset VCS_INFO_message_${i}_
- done
- fi
- if [[ $1 == '--nvcs' ]] ; then
- [[ $2 == 'preinit' ]] && (( maxexports == 0 )) && (( maxexports = 1 ))
- for i in {0..$((maxexports - 1))} ; do
- typeset -gx VCS_INFO_message_${i}_=
- done
- VCS_INFO_nvcsformats $2
- fi
-
- (( ${#msgs} - 1 < 0 )) && return 0
- for i in {0..$(( ${#msgs} - 1 ))} ; do
- (( j = i + 1 ))
- typeset -gx VCS_INFO_message_${i}_=${msgs[$j]}
- done
- return 0
-}
-# }}}
-# information gathering
-VCS_INFO_bzr_get_data () { # {{{
- setopt localoptions noksharrays
- local bzrbase bzrbr
- local -a bzrinfo
-
- if zstyle -t ":vcs_info:${vcs}:${usercontext}" "use-simple" ; then
- bzrbase=${vcs_comm[basedir]}
- bzrinfo[2]=${bzrbase:t}
- if [[ -f ${bzrbase}/.bzr/branch/last-revision ]] ; then
- bzrinfo[1]=$(< ${bzrbase}/.bzr/branch/last-revision)
- bzrinfo[1]=${${bzrinfo[1]}%% *}
- fi
- else
- bzrbase=${${(M)${(f)"$( bzr info )"}:# ##branch\ root:*}/*: ##/}
- bzrinfo=( ${${${(M)${(f)"$( bzr version-info )"}:#(#s)(revno|branch-nick)*}/*: /}/*\//} )
- bzrbase="$(VCS_INFO_realpath ${bzrbase})"
- fi
-
- zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat bzrbr || bzrbr="%b:%r"
- zformat -f bzrbr "${bzrbr}" "b:${bzrinfo[2]}" "r:${bzrinfo[1]}"
- VCS_INFO_formats '' "${bzrbr}" "${bzrbase}"
- return 0
-}
-# }}}
-VCS_INFO_cdv_get_data () { # {{{
- local cdvbase
-
- cdvbase=${vcs_comm[basedir]}
- VCS_INFO_formats '' "${cdvbase:t}" "${cdvbase}"
- return 0
-}
-# }}}
-VCS_INFO_cvs_get_data () { # {{{
- local cvsbranch cvsbase basename
-
- cvsbase="."
- while [[ -d "${cvsbase}/../CVS" ]]; do
- cvsbase="${cvsbase}/.."
- done
- cvsbase="$(VCS_INFO_realpath ${cvsbase})"
- cvsbranch=$(< ./CVS/Repository)
- basename=${cvsbase:t}
- cvsbranch=${cvsbranch##${basename}/}
- [[ -z ${cvsbranch} ]] && cvsbranch=${basename}
- VCS_INFO_formats '' "${cvsbranch}" "${cvsbase}"
- return 0
-}
-# }}}
-VCS_INFO_darcs_get_data () { # {{{
- local darcsbase