--- bashcompinit.new Wed Jan 29 10:28:23 2003 +++ bashcompinit.4.0 Wed Jan 29 10:28:23 2003 @@ -7,6 +7,7 @@ local -a COMP_WORDS COMPREPLY BASH_VERSINFO local COMP_LINE="$words" local -A savejobstates savejobtexts + set -- $=_bash_comps[$service] (( COMP_POINT = 1 + ${#${(j. .)words[1,CURRENT-1]}} + $#QIPREFIX + $#IPREFIX + $#PREFIX )) (( COMP_CWORD = CURRENT - 1)) @@ -59,77 +60,77 @@ [abcdefgjkuv]) OPTARG="${shortopts[$name]}" ;& A) case $OPTARG in - alias) results+=( "${(k)aliases[@]}" ) ;; - arrayvar) results+=( "${(k@)parameters[(R)array*]}" ) ;; - binding) results+=( "${(k)widgets[@]}" ) ;; - builtin) results+=( "${(k)builtins[@]}" "${(k)dis_builtins[@]}" ) ;; + alias) results=( "${results[@]}" "${(k)aliases[@]}" ) ;; + arrayvar) results=( "${results[@]}" "${(k@)parameters[(R)array*]}" ) ;; + binding) results=( "${results[@]}" "${(k)widgets[@]}" ) ;; + builtin) results=( "${results[@]}" "${(k)builtins[@]}" "${(k)dis_builtins[@]}" ) ;; command) - results+=( - "${(k)commands[@]}" "${(k)aliases[@]}" "${(k)builtins[@]}" - "${(k)functions[@]}" "${(k)reswords[@]}" + results=( + "${results[@]}" "${(k)commands[@]}" "${(k)aliases[@]}" + "${(k)builtins[@]}" "${(k)functions[@]}" "${(k)reswords[@]}" ) ;; directory) setopt bareglobqual - results+=( ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N-/) ) + results=( "${results[@]}" ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N-/) ) setopt nobareglobqual ;; - disabled) results+=( "${(k)dis_builtins[@]}" ) ;; - enabled) results+=( "${(k)builtins[@]}" ) ;; - export) results+=( "${(k)parameters[(R)*export*]}" ) ;; + disabled) results=( "${results[@]}" "${(k)dis_builtins[@]}" ) ;; + enabled) results=( "${results[@]}" "${(k)builtins[@]}" ) ;; + export) results=( "${results[@]}" "${(k)parameters[(R)*export*]}" ) ;; file) setopt bareglobqual - results+=( ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N) ) + results=( "${results[@]}" ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N) ) setopt nobareglobqual ;; - function) results+=( "${(k)functions[@]}" ) ;; + function) results=( "${results[@]}" "${(k)functions[@]}" ) ;; group) emulate zsh _groups -U -O res emulate sh setopt kshglob noshglob braceexpand - results+=( "${res[@]}" ) + results=( "${results[@]}" "${res[@]}" ) ;; hostname) emulate zsh _hosts -U -O res emulate sh setopt kshglob noshglob braceexpand - results+=( "${res[@]}" ) + results=( "${results[@]}" "${res[@]}" ) ;; - job) results+=( "${savejobtexts[@]%% *}" );; - keyword) results+=( "${(k)reswords[@]}" ) ;; + job) results=( "${results[@]}" "${savejobtexts[@]%% *}" );; + keyword) results=( "${results[@]}" "${(k)reswords[@]}" ) ;; running) jids=( "${(@k)savejobstates[(R)running*]}" ) for job in "${jids[@]}"; do - results+=( ${savejobtexts[$job]%% *} ) + results=( "${results[@]}" ${savejobtexts[$job]%% *} ) done ;; stopped) jids=( "${(@k)savejobstates[(R)suspended*]}" ) for job in "${jids[@]}"; do - results+=( ${savejobtexts[$job]%% *} ) + results=( "${results[@]}" ${savejobtexts[$job]%% *} ) done ;; - setopt|shopt) results+=( "${(k)options[@]}" ) ;; - signal) results+=( "SIG${^signals[@]}" ) ;; - user) results+=( "${(k)userdirs[@]}" ) ;; - variable) results+=( "${(k)parameters[@]}" ) ;; + setopt|shopt) results=( "${results[@]}" "${(k)options[@]}" ) ;; + signal) results=( "${results[@]}" "SIG${^signals[@]}" ) ;; + user) results=( "${results[@]}" "${(k)userdirs[@]}" ) ;; + variable) results=( "${results[@]}" "${(k)parameters[@]}" ) ;; helptopic) ;; esac ;; F) COMPREPLY=() $OPTARG "${words[0]}" "${words[CURRENT-1]}" "${words[CURRENT-2]}" - results+=( "${COMPREPLY[@]}" ) + results=( "${results[@]}" "${COMPREPLY[@]}" ) ;; G) setopt nullglob - results+=( ${~OPTARG} ) + results=( "${results[@]}" ${~OPTARG} ) unsetopt nullglob ;; - W) eval "results+=( $OPTARG )" ;; - C) results+=( $(eval $OPTARG) ) ;; + W) eval "results=( "${results[@]}" $OPTARG )" ;; + C) results=( "${results[@]}" $(eval $OPTARG) ) ;; P) prefix="$OPTARG" ;; S) suffix="$OPTARG" ;; X) @@ -157,16 +158,22 @@ zparseopts -D -a void o: A: G: W: C: F: P: S: X: a b c d e f g j k u v \ p=print r=remove if [[ -n $print ]]; then - printf 'complete %2$s %1$s\n' "${(@kv)_comps[(R)_bash*]#* }" + for cmd in ${(k)_bash_comps}; do + print "complete ${_bash_comps[$cmd]} $cmd" + done elif [[ -n $remove ]]; then for cmd; do - unset "_comps[$cmd]" + unset "_bash_comps[$cmd]" done else - compdef _bash_complete\ ${(j. .)${(q)args[1,-1-$#]}} "$@" + for cmd; do + _bash_comps[$cmd]="${args[1,-1-$#]}" + done + compdef _bash_complete "$@" fi } +typeset -gA _bash_comps unfunction bashcompinit autoload -U bashcompinit return 0