X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=c03b61435185ced591a67f16be498a8ed45936dc;hb=ebd9d165348f511fa1082f9a4c0ce341e277f131;hp=c021c87db201905c6accc5a41127b816f79568f7;hpb=ea0e7e8f8398b56acfc3988255df57efc29aa65d;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index c021c87..c03b614 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -450,36 +450,35 @@ fi check_com() { emulate -L zsh local -i comonly gatoo + comonly=0 + gatoo=0 if [[ $1 == '-c' ]] ; then - (( comonly = 1 )) - shift + comonly=1 + shift 1 elif [[ $1 == '-g' ]] ; then - (( gatoo = 1 )) - else - (( comonly = 0 )) - (( gatoo = 0 )) + gatoo=1 + shift 1 fi if (( ${#argv} != 1 )) ; then - printf 'usage: check_com [-c] \n' >&2 + printf 'usage: check_com [-c|-g] \n' >&2 return 1 fi if (( comonly > 0 )) ; then - [[ -n ${commands[$1]} ]] && return 0 + (( ${+commands[$1]} )) && return 0 return 1 fi - if [[ -n ${commands[$1]} ]] \ - || [[ -n ${functions[$1]} ]] \ - || [[ -n ${aliases[$1]} ]] \ - || [[ -n ${reswords[(r)$1]} ]] ; then - + if (( ${+commands[$1]} )) \ + || (( ${+functions[$1]} )) \ + || (( ${+aliases[$1]} )) \ + || (( ${+reswords[(r)$1]} )) ; then return 0 fi - if (( gatoo > 0 )) && [[ -n ${galiases[$1]} ]] ; then + if (( gatoo > 0 )) && (( ${+galiases[$1]} )) ; then return 0 fi @@ -1597,50 +1596,52 @@ isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history DIRSTACKSIZE=${DIRSTACKSIZE:-20} DIRSTACKFILE=${DIRSTACKFILE:-${ZDOTDIR:-${HOME}}/.zdirs} -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() { - (( $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 zstyle -T ':grml:chpwd:dirstack' enable; then + 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 + } -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 + chpwd() { + (( $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 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[@]}" ) + 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 fi # directory based profiles