typeset -g -a svtab typeset -g -A svtab_flags svtab_sh svtab_src typeset -g zsv_flags zsv_sh local f name flags sh line local -a split # invoked from zsv.exec, don't parse other files unnecessarily if [[ -n $1 && -e $zsv_svd/$1 ]]; then svtab=( $1 ) svtab_src[$1]=$zsv_svd/$1 svtab_sh[$1]="$(<$zsv_svd/$1)" line=${${=svtab_sh[$1]}[1]} if [[ $line == '#flags:'* ]]; then svtab_flags[$1]=$zsv_default_flags${line#\#flags:} else svtab_flags[$1]=$zsv_default_flags fi return 0 fi # read svtab if [[ -e $zsv_svtab ]]; then while IFS=: read line; do [[ $line == '#'* ]] && continue if [[ $line == [$~IFS]* ]]; then svtab_sh[$name]+=$'\n'$line else split=( ${(s.:.)line} ) name=$split[1] svtab_src[$name]=$zsv_svtab if [[ ${line#*:} == :* ]]; then sh=${line#*::} else flags=$split[2] if (( $#split >= 3 )); then sh=${${line#*:}#*:} else unset sh fi fi svtab+=( $name ) svtab_flags[$name]=$zsv_default_flags$flags svtab_sh[$name]=${sh} fi done <$zsv_svtab fi # read all plain files (or symlinks to) in sv.d for f in $zsv_svd/*(N-.); do name=$f:t svtab+=( $name ) svtab_src[$name]=$f svtab_sh[$name]="$(<$f)" line=${${=svtab_sh[$name]}[1]} if [[ $line == '#flags:'* ]]; then svtab_flags[$name]=$zsv_default_flags${line#\#flags:} fi done # vim: ft=zsh noet ts=4 sts=4 sw=4