X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=f6434caf70f8554864523e2ddc6954b2c74badeb;hb=ead1a063a2fb9189bc697be2120b24cf3f3dd56a;hp=f3c270b75e3e0f6b00f32bd744ac67b1ee196bd9;hpb=9cbfcb4bb40c2c238386febd496f96d9e91645ae;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index f3c270b..f6434ca 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -388,9 +388,6 @@ setopt extended_glob # display PID when suspending processes as well setopt longlistjobs -# try to avoid the 'zsh: no matches found...' -setopt nonomatch - # report the status of backgrounds jobs immediately setopt notify @@ -528,30 +525,6 @@ salias() { return 0 } -# a "print -l ${(u)foo}"-workaround for pre-4.2.0 shells -# usage: uprint foo -# Where foo is the *name* of the parameter you want printed. -# Note that foo is no typo; $foo would be wrong here! -if ! is42 ; then - uprint () { - emulate -L zsh - local -a u - local w - local parameter=$1 - - if [[ -z ${parameter} ]] ; then - printf 'usage: uprint \n' - return 1 - fi - - for w in ${(P)parameter} ; do - [[ -z ${(M)u:#$w} ]] && u=( $u $w ) - done - - builtin print -l $u - } -fi - # Check if we can read given files and source those we can. xsource() { if (( ${#argv} < 1 )) ; then @@ -624,14 +597,6 @@ export PAGER=${PAGER:-less} #v# export MAIL=${MAIL:-/var/mail/$USER} -# if we don't set $SHELL then aterm, rxvt,.. will use /bin/sh or /bin/bash :-/ -if [[ -z "$SHELL" ]] ; then - SHELL="$(which zsh)" - if [[ -x "$SHELL" ]] ; then - export SHELL - fi -fi - # color setup for ls: check_com -c dircolors && eval $(dircolors -b) # color setup for ls on OS X / FreeBSD: @@ -989,7 +954,7 @@ function Accept-Line-HandleContext() { function accept-line() { setopt localoptions noksharrays - local -ax cmdline + local -a cmdline local -x alcontext local buf com fname format msg default_action @@ -1627,23 +1592,52 @@ isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history DIRSTACKSIZE=${DIRSTACKSIZE:-20} DIRSTACKFILE=${DIRSTACKFILE:-${ZDOTDIR:-${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[1] ]] && cd $dirstack[1] && cd $OLDPWD -fi +typeset -gaU GRML_PERSISTENT_DIRSTACK +function grml_dirstack_filter() { + local -a exclude + local filter entry + if zstyle -s ':grml:chpwd:dirstack' filter filter; then + $filter $1 && return 0 + fi + if zstyle -a ':grml:chpwd:dirstack' exclude exclude; then + for entry in "${exclude[@]}"; do + [[ $1 == ${~entry} ]] && return 0 + done + fi + return 1 +} chpwd() { - if (( $DIRSTACKSIZE <= 0 )) || [[ -z $DIRSTACKFILE ]]; then return; fi - local -ax my_stack - my_stack=( ${PWD} ${dirstack} ) - if is42 ; then - builtin print -l ${(u)my_stack} >! ${DIRSTACKFILE} - else - uprint my_stack >! ${DIRSTACKFILE} - fi + (( $DIRSTACKSIZE <= 0 )) && return + [[ -z $DIRSTACKFILE ]] && return + grml_dirstack_filter $PWD && return + GRML_PERSISTENT_DIRSTACK=( + $PWD "${(@)GRML_PERSISTENT_DIRSTACK[1,$DIRSTACKSIZE]}" + ) + builtin print -l ${GRML_PERSISTENT_DIRSTACK} >! ${DIRSTACKFILE} } +if [[ -f ${DIRSTACKFILE} ]]; then + # Enabling NULL_GLOB via (N) weeds out any non-existing + # directories from the saved dir-stack file. + dirstack=( ${(f)"$(< $DIRSTACKFILE)"}(N) ) + # "cd -" won't work after login by just setting $OLDPWD, so + [[ -d $dirstack[1] ]] && cd -q $dirstack[1] && cd -q $OLDPWD +fi + +if zstyle -T ':grml:chpwd:dirstack' filter-on-load; then + for i in "${dirstack[@]}"; do + if ! grml_dirstack_filter "$i"; then + GRML_PERSISTENT_DIRSTACK=( + "${GRML_PERSISTENT_DIRSTACK[@]}" + $i + ) + fi + done +else + GRML_PERSISTENT_DIRSTACK=( "${dirstack[@]}" ) +fi + # directory based profiles if is433 ; then @@ -2938,7 +2932,7 @@ fi # zsh profiling profile() { - ZSH_PROFILE_RC=1 $SHELL "$@" + ZSH_PROFILE_RC=1 zsh "$@" } #f1# Edit an alias via zle @@ -2954,12 +2948,12 @@ edfunc() { compdef _functions edfunc # use it e.g. via 'Restart apache2' -#m# f6 Start() \kbd{/etc/init.d/\em{process}}\quad\kbd{start} -#m# f6 Restart() \kbd{/etc/init.d/\em{process}}\quad\kbd{restart} -#m# f6 Stop() \kbd{/etc/init.d/\em{process}}\quad\kbd{stop} -#m# f6 Reload() \kbd{/etc/init.d/\em{process}}\quad\kbd{reload} -#m# f6 Force-Reload() \kbd{/etc/init.d/\em{process}}\quad\kbd{force-reload} -#m# f6 Status() \kbd{/etc/init.d/\em{process}}\quad\kbd{status} +#m# f6 Start() \kbd{service \em{process}}\quad\kbd{start} +#m# f6 Restart() \kbd{service \em{process}}\quad\kbd{restart} +#m# f6 Stop() \kbd{service \em{process}}\quad\kbd{stop} +#m# f6 Reload() \kbd{service \em{process}}\quad\kbd{reload} +#m# f6 Force-Reload() \kbd{service \em{process}}\quad\kbd{force-reload} +#m# f6 Status() \kbd{service \em{process}}\quad\kbd{status} if [[ -d /etc/init.d || -d /etc/service ]] ; then __start_stop() { local action_="${1:l}" # e.g Start/Stop/Restart @@ -2980,8 +2974,12 @@ if [[ -d /etc/init.d || -d /etc/service ]] ; then *) $SUDO "/etc/init.d/$service_" "${action_}" "$param_" ;; esac else - # sysvinit - $SUDO "/etc/init.d/$service_" "${action_}" "$param_" + # sysv/sysvinit-utils, upstart + if check_com -c service ; then + $SUDO service "$service_" "${action_}" "$param_" + else + $SUDO "/etc/init.d/$service_" "${action_}" "$param_" + fi fi }