X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=3c287dbdf0c26c09eb93e9d81016dc17d562b714;hb=b97f20faee295c7cc16f7b32200c96462d65f591;hp=50fac90f6533671befa5b739ed4a5d2de1b212f6;hpb=bd870868d3b24f8ecd0056bae2597709a2c53adf;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 50fac90..3c287db 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -109,7 +109,7 @@ if [[ $ZSH_PROFILE_RC -gt 0 ]] ; then fi # load .zshrc.pre to give the user the chance to overwrite the defaults -[[ -r ${HOME}/.zshrc.pre ]] && source ${HOME}/.zshrc.pre +[[ -r ${ZDOTDIR:-${HOME}}/.zshrc.pre ]] && source ${ZDOTDIR:-${HOME}}/.zshrc.pre # check for version/system # check for versions (compatibility reasons) @@ -502,7 +502,7 @@ xunfunction() { # modifications in ~/.zshrc.local zrclocal() { xsource "/etc/zsh/zshrc.local" - xsource "${HOME}/.zshrc.local" + xsource "${ZDOTDIR:-${HOME}}/.zshrc.local" return 0 } @@ -946,8 +946,7 @@ zleiab() { return 0 fi - matched_chars='[.-|_a-zA-Z0-9]#' - LBUFFER=${LBUFFER%%(#m)[.-|_a-zA-Z0-9]#} + LBUFFER=${LBUFFER%%(#m)[.\-+:|_a-zA-Z0-9]#} LBUFFER+=${abk[$MATCH]:-$MATCH} } @@ -1126,17 +1125,17 @@ fi # history -ZSHDIR=$HOME/.zsh +ZSHDIR=${ZDOTDIR:-${HOME}/.zsh} #v# -HISTFILE=$HOME/.zsh_history +HISTFILE=${ZDOTDIR:-${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} +DIRSTACKFILE=${DIRSTACKFILE:-${ZDOTDIR:-${HOME}}/.zdirs} if [[ -f ${DIRSTACKFILE} ]] && [[ ${#dirstack[*]} -eq 0 ]] ; then dirstack=( ${(f)"$(< $DIRSTACKFILE)"} ) @@ -1285,9 +1284,163 @@ function command_not_found_handler() { return 1 } +function prompt_grml_help () { + cat <<__EOF0__ + prompt grml + + This is the prompt as used by the grml-live system . + It is a rather simple one-line prompt, that by default looks like this: + + @ [ ]% + + The prompt itself integrates with zsh's prompt themes system (as you are + witnessing right now) and is configurable to a certain degree. In + particular, these aspects are customisable: + + - The items used in the prompt (e.g. you can remove \`user' from + the list of activated items, which will cause the user name to + be omitted from the prompt string). + + - 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. + + The actual configuration is done via zsh's \`zstyle' mechanism. The + context, that is used while looking up styles is: + + ':prompt:grml:' + + Here is either 'items:' or 'setup'. The available + styles in the \`setup' context are: use-rprompt, items. For example, + default \`items' style could be configured like this: + + zstyle ':prompt:grml:setup' items user at host path \\ + vcs percent + + The styles: + + - use-rprompt (boolean): If \`true' (the default), print a sad smiley + in $RPROMPT if the last command a returned non-successful error + code. + + - 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 + + Available styles in 'items:' are: pre, post. These are strings that + are inserted before (pre) and after (post) the item in question. Thus, the + following would cause the user name to be printed in red instead of the + default blue: + + zstyle ':prompt:grml:items:user' pre '%F{red}' + + Note, that the \`post' style may remain at its default value, because its + default value is '%f', which turns the foreground text attribute off (which + is exactly, what is still required with the new \`pre' value). +__EOF0__ +} + +function prompt_grml_setup () { + emulate -L zsh + autoload -Uz vcs_info + autoload -Uz add-zsh-hook + add-zsh-hook precmd prompt_grml_precmd +} + +typeset -gA grml_prompt_pre_default \ + grml_prompt_post_default \ + grml_prompt_token_default + +grml_prompt_pre_default=( + rc '%F{red}' + rc-always '' + change-root '' + user '%B%F{blue}' + at '' + host '' + path '%b' + vcs '' + percent '' + sad-smiley '' +) + +grml_prompt_post_default=( + rc '%f' + rc-always '' + change-root '' + user '%f%b' + at '' + host ' ' + path ' %B' + vcs '' + percent ' ' + sad-smiley '' +) + +grml_prompt_token_default=( + rc '%(?..%? )' + rc-always '%?' + change-root 'debian_chroot' + user '%n' + at '@' + host '%m' + path '%40<..<%~%<<' + vcs '0' + percent '%%' + sad-smiley '%(?..:()' +) + +function prompt_grml_precmd () { + emulate -L zsh + setopt extendedglob + local it apre apost new v + local -a items + + zstyle -a ':prompt:grml:setup' items items \ + || items=( rc change-root user at host path vcs percent ) + PS1='' + for it in "${items[@]}"; do + zstyle -s ":prompt:grml:items:$it" pre apre \ + || apre=${grml_prompt_pre_default[$it]} + zstyle -s ":prompt:grml:items:$it" post apost \ + || apost=${grml_prompt_post_default[$it]} + zstyle -s ":prompt:grml:items:$it" token new \ + || new=${grml_prompt_token_default[$it]} + PS1="${PS1}${apre}" + case $it in + change-root) + (( ${+parameters[$new]} )) && PS1="${PS1}(${(P)new})" + ;; + vcs) + v="vcs_info_msg_${new}_" + vcs_info + if (( ${+parameters[$v]} )) && [[ -n "${(P)v}" ]]; then + PS1="${PS1}${(P)v}" + fi + ;; + *) PS1="${PS1}${new}" ;; + esac + PS1="${PS1}${apost}" + done + if zstyle -t ':prompt:grml:setup' use-rprompt; then + zstyle -s ":prompt:grml:items:sad-smiley" token new \ + || new=${grml_prompt_token_default[sad-smiley]} + RPS1="$new" + fi +} + # set prompt if zrcautoload promptinit && promptinit 2>/dev/null ; then promptinit # people should be able to use their favourite prompt + + # 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 ) + # Also, keep the array sorted... + prompt_themes=( "${(@on)prompt_themes}" ) else print 'Notice: no promptinit available :(' fi @@ -1784,7 +1937,6 @@ grmlcomp() { $(hostname) "$_ssh_hosts[@]" "$_etc_hosts[@]" - grml.org localhost ) zstyle ':completion:*:hosts' hosts $hosts @@ -1913,6 +2065,19 @@ if check_com -c $PAGER ; then _dnews() { _files -W /usr/share/doc -/ } compdef _dnews dnews + #f1# View Debian's copyright of a given package + dcopyright() { + emulate -L zsh + if [[ -r /usr/share/doc/$1/copyright ]] ; then + $PAGER /usr/share/doc/$1/copyright + else + echo "No copyright file for package $1 found, sorry." + return 1 + fi + } + _dcopyright() { _files -W /usr/share/doc -/ } + compdef _dcopyright dcopyright + #f1# View upstream's changelog of a given package uchange() { emulate -L zsh