X-Git-Url: http://git.grml.org/?p=grml-etc-core.git;a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=14cc6481ffaf8d40b421720a83c3649122d68656;hp=6a7a1a6ea23dbb331d1c4b9191c70e1f813adb06;hb=d005e0b78bac79a566a3b16fb9e66b28bca48d61;hpb=7e40be9c4608489350bbdb86f86ea884320c1c02 diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 6a7a1a6..14cc648 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -805,9 +805,16 @@ grmlcomp() { # command for process lists, the local web server details and host completion zstyle ':completion:*:urls' local 'www' '/var/www/' 'public_html' - # caching - [[ -d $ZSHDIR/cache ]] && zstyle ':completion:*' use-cache yes && \ - zstyle ':completion::complete:*' cache-path $ZSHDIR/cache/ + # Some functions, like _apt and _dpkg, are very slow. We can use a cache in + # order to speed things up + if [[ ${GRML_COMP_CACHING:-yes} == yes ]]; then + GRML_COMP_CACHE_DIR=${GRML_COMP_CACHE_DIR:-${ZDOTDIR:-$HOME}/.cache} + if [[ ! -d ${GRML_COMP_CACHE_DIR} ]]; then + command mkdir -p "${GRML_COMP_CACHE_DIR}" + fi + zstyle ':completion:*' use-cache yes + zstyle ':completion:*:complete:*' cache-path "${GRML_COMP_CACHE_DIR}" + fi # host completion if is42 ; then @@ -1580,8 +1587,6 @@ function command_not_found_handler() { # history -ZSHDIR=${ZDOTDIR:-${HOME}/.zsh} - #v# HISTFILE=${ZDOTDIR:-${HOME}}/.zsh_history isgrmlcd && HISTSIZE=500 || HISTSIZE=5000 @@ -1592,50 +1597,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 @@ -2504,16 +2511,14 @@ hash -d www=/var/www if check_com -c screen ; then if [[ $UID -eq 0 ]] ; then if [[ -r /etc/grml/screenrc ]]; then - alias screen="${commands[screen]} -c /etc/grml/screenrc" + alias screen='screen -c /etc/grml/screenrc' fi - elif [[ -r $HOME/.screenrc ]] ; then - alias screen="${commands[screen]} -c $HOME/.screenrc" - else + elif [[ ! -r $HOME/.screenrc ]] ; then if [[ -r /etc/grml/screenrc_grml ]]; then - alias screen="${commands[screen]} -c /etc/grml/screenrc_grml" + alias screen='screen -c /etc/grml/screenrc_grml' else if [[ -r /etc/grml/screenrc ]]; then - alias screen="${commands[screen]} -c /etc/grml/screenrc" + alias screen='screen -c /etc/grml/screenrc' fi fi fi @@ -2703,11 +2708,10 @@ __EOF0__ fi fi -# Use hard limits, except for a smaller stack and no core dumps -unlimit -is425 && limit stack 8192 -isgrmlcd && limit core 0 # important for a live-cd-system -limit -s +if isgrmlcd; then + # No core dumps: important for a live-cd-system + limit -s core 0 +fi # grmlstuff grmlstuff() {