* bash completion functions @ 2003-01-28 9:18 Oliver Kiddle 2003-01-28 9:25 ` Zefram ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Oliver Kiddle @ 2003-01-28 9:18 UTC (permalink / raw) To: Zsh workers Attached is the bash completion emulation as promised. I've called the function which enables the system bashcompinit so if you have an idea for a better name, please say now. Which directory should it go in? I was thinking just the Completion directory. It contains three functions. compgen and complete correspond to the bash builtins. _bash_complete is a wrapper function which gets run from the zsh completion system. It requires 4.1, mainly because I stuff the arguments all into the _comps array elements so for the 4.0 back port (which I will do), I'll have to use a separate (_bash_comps) array. The only things I've knowingly left unimplemented is completion for jobs (because compgen is always run in a subshell) and complete -r (because I couldn't be bothered). Actually compdef perhaps ought to have -L and -r (remove) options. I've also commented out support for the last compgen argument which is something I'm a little unsure about. Also, $COMP_POINT might be iffy but it never seems to be used anyway. Finally bash's compgen -C option does something weird so either it is buggy or I don't understand but I've gone mostly by the documentation there. If you want to attempt to source the bash_completion project, the following may help a little. # their have function doesn't work in zsh (unset -v) have() { unset have (( ${+commands[$1]} )) && have=yes } # shopt is bash's setopt alias shopt=':' # resolve function name clash (if you don't use autoload -U) alias _expand=_bash_expand # these are the options I seem to need to best emulate bash. Some may be # missing and noshglob is questionable (but solved a specific issue) emulate -L sh setopt kshglob noshglob braceexpand Oliver #autoload _bash_complete() { local ret=1 local -a suf matches local COMP_POINT COMP_CWORD local -a COMP_WORDS COMPREPLY BASH_VERSINFO local COMP_LINE="$words" (( COMP_POINT = ${#${(j. .)words}} + $$#QIPREFIX + $#IPREFIX + $#PREFIX )) (( COMP_CWORD = CURRENT - 1)) COMP_WORDS=( $words ) BASH_VERSINFO=( 2 05b 0 1 release ) [[ ${argv[${argv[(I)nospace]:-0}-1]} = -o ]] && suf=( -S '' ) matches=( ${(f)"$(compgen $@)"} ) if [[ -n $matches ]]; then if [[ ${argv[${argv[(I)filenames]:-0}-1]} = -o ]]; then compset -P '*/' && matches=( ${matches##*/} ) compset -S '/*' && matches=( ${matches%%/*} ) compadd -f "${suf[@]}" -a matches && ret=0 else compadd "${suf[@]}" -a matches && ret=0 fi fi if (( ret )); then if [[ ${argv[${argv[(I)default]:-0}-1]} = -o ]]; then _default "${suf[@]}" && ret=0 elif [[ ${argv[${argv[(I)dirnames]:-0}-1]} = -o ]]; then _directories "${suf[@]}" && ret=0 fi fi return ret } compgen() { local opts prefix suffix ret=1 OPTARG OPTIND local -a name res results local -A shortopts emulate -L sh setopt kshglob noshglob braceexpand nokshautoload shortopts=( a alias b builtin c command d directory e export f file g group j job k keyword u user v variable ) while getopts "o:A:G:C:F:P:S:W:X:abcdefgjkuv" name; do case $name in [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[@]}" ) ;; command) results+=( "${(k)commands[@]}" "${(k)aliases[@]}" "${(k)builtins[@]}" "${(k)functions[@]}" "${(k)reswords[@]}" ) ;; directory) setopt bareglobqual results+=( ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N-/) ) setopt nobareglobqual ;; disabled) results+=( "${(k)dis_builtins[@]}" ) ;; enabled) results+=( "${(k)builtins[@]}" ) ;; export) results+=( "${(k)parameters[(R)*export*]}" ) ;; file) setopt bareglobqual results+=( ${IPREFIX}${PREFIX}*${SUFFIX}${ISUFFIX}(N) ) setopt nobareglobqual ;; function) results+=( "${(k)functions[@]}" ) ;; group) emulate zsh _groups -U -O res emulate sh setopt kshglob noshglob braceexpand results+=( "${res[@]}" ) ;; hostname) emulate zsh _hosts -U -O res emulate sh setopt kshglob noshglob braceexpand results+=( "${res[@]}" ) ;; keyword) results+=( "${(k)reswords[@]}" ) ;; setopt|shopt) results+=( "${(k)options[@]}" ) ;; signal) results+=( "SIG${^signals[@]}" ) ;; user) results+=( "${(k)userdirs[@]}" ) ;; variable) results+=( "${(k)parameters[@]}" ) ;; helptopic|job|running|stopped) ;; esac ;; F) COMPREPLY=() $OPTARG "${words[0]}" "${words[CURRENT-1]}" "${words[CURRENT-2]}" results+=( "${COMPREPLY[@]}" ) ;; G) setopt nullglob results+=( ${~OPTARG} ) unsetopt nullglob ;; W) eval "results+=( $OPTARG )" ;; C) results+=( $(eval $OPTARG) ) ;; P) prefix="$OPTARG" ;; S) suffix="$OPTARG" ;; X) if [[ ${OPTARG[0]} = '!' ]]; then results=( "${(M)results[@]:#${OPTARG#?}}" ) else results=( "${results[@]:#$OPTARG}" ) fi ;; esac done # support for the last, `word' option to compgen. Not particularly valuable # and without it zsh matching can do a better job. Comment in if needed. #shift $(( OPTIND - 1 )) #(( $# )) && results=( "${(M)results[@]:#$1*}" ) print -l -- "$prefix${^results[@]}$suffix" } complete() { emulate -L zsh local args void cmd print remove args=( "$@" ) 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 for cmd print in ${(kv)_comps[(R)_bash*]}; do print "complete ${print#* } $cmd" done elif [[ -n $remove ]]; then print "not implemented: -r option" else compdef _bash_complete\ ${(j. .)${(q)args[1,-1-$#]}} "$@" fi } unfunction bashcompinit autoload -U bashcompinit return 0 This e-mail and any attachment is for authorised use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by, any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. Thank you. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-28 9:18 bash completion functions Oliver Kiddle @ 2003-01-28 9:25 ` Zefram 2003-01-28 16:42 ` Bart Schaefer 2003-02-03 12:51 ` Clemens Fischer 2 siblings, 0 replies; 8+ messages in thread From: Zefram @ 2003-01-28 9:25 UTC (permalink / raw) To: Oliver Kiddle; +Cc: zsh-workers Oliver Kiddle wrote: >Also, $COMP_POINT might be iffy but it never seems to be used anyway. ... > (( COMP_POINT = ${#${(j. .)words}} + $$#QIPREFIX + $#IPREFIX + $#PREFIX )) That "$$" looks suspicious. -zefram ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-28 9:18 bash completion functions Oliver Kiddle 2003-01-28 9:25 ` Zefram @ 2003-01-28 16:42 ` Bart Schaefer 2003-01-29 10:17 ` Oliver Kiddle 2003-02-03 12:51 ` Clemens Fischer 2 siblings, 1 reply; 8+ messages in thread From: Bart Schaefer @ 2003-01-28 16:42 UTC (permalink / raw) To: Zsh workers On Jan 28, 10:18am, Oliver Kiddle wrote: } Subject: bash completion functions } } The only things I've knowingly left unimplemented is completion for } jobs (because compgen is always run in a subshell) We could do something about this, generically, by saving local copies of the jobstates and jobtexts hashes in _main_complete or some such. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-28 16:42 ` Bart Schaefer @ 2003-01-29 10:17 ` Oliver Kiddle 2003-01-29 11:16 ` Peter Stephenson 0 siblings, 1 reply; 8+ messages in thread From: Oliver Kiddle @ 2003-01-29 10:17 UTC (permalink / raw) To: Bart Schaefer; +Cc: Zsh workers [-- Attachment #1: Type: text/plain, Size: 4333 bytes --] On 28 Jan, Bart wrote: > On Jan 28, 10:18am, Oliver Kiddle wrote: > } The only things I've knowingly left unimplemented is completion for > } jobs (because compgen is always run in a subshell) > > We could do something about this, generically, by saving local copies of > the jobstates and jobtexts hashes in _main_complete or some such. I didn't think of that. I've done that in the _bash_completion function. I can't see that it would be particularly useful to have in _main_complete (matches added by a compadd running in a subshell are lost anyway). It's not likely to be so useful though because job completion is most useful with builtins for which we have perfectly good zsh completions already. But it is nice to have for completeness. I've attached an update patch which does this job stuff, fixes $COMP_POINT and does complete -r. Only thing it doesn't do now is complete bash help topics. The second (mime) attachment is the 4.0 back port. Any ideas on where in the manual I should mention this function? It only needs a couple of lines. The User Contributions chapter seems to cover stuff in the Functions directory. Or would it be better mentioned in the FAQ? Oliver --- Completion/bashcompinit Wed Jan 29 10:28:23 2003 +++ Completion/bashcompinit Wed Jan 29 10:28:23 2003 @@ -6,12 +6,16 @@ local COMP_POINT COMP_CWORD local -a COMP_WORDS COMPREPLY BASH_VERSINFO local COMP_LINE="$words" + local -A savejobstates savejobtexts - (( COMP_POINT = ${#${(j. .)words}} + $$#QIPREFIX + $#IPREFIX + $#PREFIX )) + (( COMP_POINT = 1 + ${#${(j. .)words[1,CURRENT-1]}} + $#QIPREFIX + $#IPREFIX + $#PREFIX )) (( COMP_CWORD = CURRENT - 1)) COMP_WORDS=( $words ) BASH_VERSINFO=( 2 05b 0 1 release ) + savejobstates=( ${(kv)jobstates} ) + savejobtexts=( ${(kv)jobtexts} ) + [[ ${argv[${argv[(I)nospace]:-0}-1]} = -o ]] && suf=( -S '' ) matches=( ${(f)"$(compgen $@)"} ) @@ -38,8 +42,8 @@ } compgen() { - local opts prefix suffix ret=1 OPTARG OPTIND - local -a name res results + local opts prefix suffix job OPTARG OPTIND ret=1 + local -a name res results jids local -A shortopts emulate -L sh @@ -93,12 +97,25 @@ setopt kshglob noshglob braceexpand results+=( "${res[@]}" ) ;; + job) results+=( "${savejobtexts[@]%% *}" );; keyword) results+=( "${(k)reswords[@]}" ) ;; + running) + jids=( "${(@k)savejobstates[(R)running*]}" ) + for job in "${jids[@]}"; do + results+=( ${savejobtexts[$job]%% *} ) + done + ;; + stopped) + jids=( "${(@k)savejobstates[(R)suspended*]}" ) + for job in "${jids[@]}"; do + results+=( ${savejobtexts[$job]%% *} ) + done + ;; setopt|shopt) results+=( "${(k)options[@]}" ) ;; signal) results+=( "SIG${^signals[@]}" ) ;; user) results+=( "${(k)userdirs[@]}" ) ;; variable) results+=( "${(k)parameters[@]}" ) ;; - helptopic|job|running|stopped) ;; + helptopic) ;; esac ;; F) @@ -125,8 +142,8 @@ esac done - # support for the last, `word' option to compgen. Not particularly valuable - # and without it zsh matching can do a better job. Comment in if needed. + # support for the last, `word' option to compgen. Zsh's matching does a + # better job but if you need to, comment this in and use compadd -U #shift $(( OPTIND - 1 )) #(( $# )) && results=( "${(M)results[@]:#$1*}" ) @@ -140,11 +157,11 @@ 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 - for cmd print in ${(kv)_comps[(R)_bash*]}; do - print "complete ${print#* } $cmd" - done + printf 'complete %2$s %1$s\n' "${(@kv)_comps[(R)_bash*]#* }" elif [[ -n $remove ]]; then - print "not implemented: -r option" + for cmd; do + unset "_comps[$cmd]" + done else compdef _bash_complete\ ${(j. .)${(q)args[1,-1-$#]}} "$@" fi This e-mail and any attachment is for authorised use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by, any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. Thank you. [-- Attachment #2: 4.0 back port --] [-- Type: text/plain, Size: 5121 bytes --] --- 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 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-29 10:17 ` Oliver Kiddle @ 2003-01-29 11:16 ` Peter Stephenson 2003-01-29 11:26 ` Peter Stephenson 2003-01-29 14:11 ` Oliver Kiddle 0 siblings, 2 replies; 8+ messages in thread From: Peter Stephenson @ 2003-01-29 11:16 UTC (permalink / raw) To: Zsh workers Oliver Kiddle wrote: > Any ideas on where in the manual I should mention this function? It > only needs a couple of lines. The User Contributions chapter seems to > cover stuff in the Functions directory. Or would it be better mentioned > in the FAQ? The reset of the completion system is all in the zshcompsys manual page. I would either add a new section for odds and ends, or sneak it into the section `Control Functions'. -- Peter Stephenson <pws@csr.com> Software Engineer CSR Ltd., Science Park, Milton Road, Cambridge, CB4 0WH, UK Tel: +44 (0)1223 692070 ********************************************************************** The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer. ********************************************************************** ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-29 11:16 ` Peter Stephenson @ 2003-01-29 11:26 ` Peter Stephenson 2003-01-29 14:11 ` Oliver Kiddle 1 sibling, 0 replies; 8+ messages in thread From: Peter Stephenson @ 2003-01-29 11:26 UTC (permalink / raw) To: Zsh workers Peter Stephenson wrote: > The reset of the completion system is all in the zshcompsys manual page. ^^^^^ that should say `rest'. > I would either add a new section for odds and ends, or sneak it into the > section `Control Functions'. pws ********************************************************************** The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer. ********************************************************************** ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-29 11:16 ` Peter Stephenson 2003-01-29 11:26 ` Peter Stephenson @ 2003-01-29 14:11 ` Oliver Kiddle 1 sibling, 0 replies; 8+ messages in thread From: Oliver Kiddle @ 2003-01-29 14:11 UTC (permalink / raw) To: Zsh workers On 29 Jan, Peter wrote: > Oliver Kiddle wrote: > > Any ideas on where in the manual I should mention this function? It > > only needs a couple of lines. The User Contributions chapter seems to > > cover stuff in the Functions directory. Or would it be better mentioned > > in the FAQ? > > The reset of the completion system is all in the zshcompsys manual page. > I would either add a new section for odds and ends, or sneak it into the > section `Control Functions'. I've put it at the end of Control Functions which results in it being just before _bash_completions in the Bindable Commands section. The patch below also adds documentation for the styles used by _email_addresses and changes _email_addresses to use the more conventional reply array instead of ali for plugins (which I forgot to do before). Oliver Index: Completion/Unix/Type/_email_addresses =================================================================== RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_email_addresses,v retrieving revision 1.1 diff -u -r1.1 _email_addresses --- Completion/Unix/Type/_email_addresses 17 Jan 2003 09:23:35 -0000 1.1 +++ Completion/Unix/Type/_email_addresses 29 Jan 2003 13:57:33 -0000 @@ -7,14 +7,14 @@ # # Plugins are written as separate functions with names starting `_email-'. # They should either do their own completion or return the addresses in the -# ali array in the form 'alias:address' and return 300. The -c option is +# reply array in the form 'alias:address' and return 300. The -c option is # passed on to plugins (and -n could be if needed ever). New plugins will be # picked up and run automatically. # plugins (( $+functions[_email-mail] )) || _email-mail() { - ali=( ${${${(M)${(f)"$(<$files[$plugin])"}:#alias*}##alias[[:blank:]]##}/[[:blank:]]##/:} ) + reply=( ${${${(M)${(f)"$(<$files[$plugin])"}:#alias*}##alias[[:blank:]]##}/[[:blank:]]##/:} ) return 300 } (( $+functions[_email-mutt] )) || _email-mutt() { _email-mail } @@ -22,13 +22,13 @@ (( $+functions[_email-MH] )) || _email-MH() { - ali=( ${${(f)"$(_call_program aliases ali)"}/: /:} ) + reply=( ${${(f)"$(_call_program aliases ali)"}/: /:} ) return 300 } (( $+functions[_email-pine] )) || _email-pine() { - ali=( ${${${${${(f)"$(<~/.addressbook)"}:#*DELETED*}:#\ *}/ [^ ]# /:}%% *} ) + reply=( ${${${${${(f)"$(<~/.addressbook)"}:#*DELETED*}:#\ *}/ [^ ]# /:}%% *} ) return 300 } @@ -77,7 +77,7 @@ } _email_addresses() { - local -a plugins ali list args + local -a plugins reply list args local -A opts files local plugin rcfile expl ret fret @@ -147,17 +147,17 @@ if (( fret == 300 )); then if (( ! $+opts[-c] )) && [[ $opts[-n] = $plugin ]]; then - zformat -a list ' -- ' "${ali[@]}" + zformat -a list ' -- ' "${reply[@]}" _wanted mail-aliases expl 'alias' compadd "$@" \ - -d list - ${ali%%:*} && ret=0 + -d list - ${reply%%:*} && ret=0 else if (( $#args )); then - ali=( ${(SM)${ali#*:}##$~__addrspec} ) + reply=( ${(SM)${reply#*:}##$~__addrspec} ) else # remove lines not containing `@' as they probably aren't addresses - ali=( "${(@)${(M@)ali:#*@*}#*:}" ) + reply=( "${(@)${(M@)reply:#*@*}#*:}" ) fi - compadd -a "$@" "$expl[@]" ali && ret=0 + compadd -a "$@" "$expl[@]" reply && ret=0 fi fi done Index: Doc/Zsh/compsys.yo =================================================================== RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v retrieving revision 1.162 diff -u -r1.162 compsys.yo --- Doc/Zsh/compsys.yo 27 Jan 2003 16:42:27 -0000 1.162 +++ Doc/Zsh/compsys.yo 29 Jan 2003 13:57:33 -0000 @@ -1244,6 +1244,15 @@ sorted alphabetically by name. If the value contains the string `tt(reverse)', sorting is done in decreasing order. ) +kindex(filter, completion style) +item(tt(filter))( +This is used by the LDAP plugin for e-mail address completion to specify +the attributes to match against when filtering entries. So for example, if +the style is set to `tt(sn)', matching is done against surnames. Standard +LDAP filtering is used so normal completion matching is bypassed. If this +style is not set, the LDAP plugin is skipped. You may also need to set the +tt(command) style before it can connect to your LDAP server though. +) kindex(force-list, completion style) item(tt(force-list))( This forces a list of completions to be shown at any point where listing is @@ -2091,6 +2100,13 @@ default), tt(_history_complete_word) will loop immediately as in a menu completion. ) +kindex(strip-comments, completion style) +item(tt(strip-comments))( +If set to `true', this style causes non-essential comment text to be +removed from the completion matches. Currently it is only used when +completing e-mail addresses where it removes any display name from the +addresses, cutting them down to plain var(user@host) form. +) kindex(subst-globs-only, completion style) item(tt(subst-globs-only))( This is used by the tt(_expand) completer. If it is set to `true', @@ -2855,6 +2871,14 @@ tt(COMPLETE_IN_WORD) option is set; otherwise, the cursor will be moved to the end of the current word before the completion code is called and hence there will be no suffix. +) +findex(bashcompinit) +item(tt(bashcompinit))( +This function provides compatibility with bash's programmable completion +system. When run it will define the functions, tt(compgen) and +tt(complete) which correspond to the bash builtins with the same names. It +will then be possible to use completion specifications and functions +written for bash. ) enditem() This e-mail and any attachment is for authorised use by the intended recipient(s) only. It may contain proprietary material, confidential information and/or be subject to legal privilege. It should not be copied, disclosed to, retained or used by, any other party. If you are not an intended recipient then please promptly delete this e-mail and any attachment and all copies and inform the sender. Thank you. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: bash completion functions 2003-01-28 9:18 bash completion functions Oliver Kiddle 2003-01-28 9:25 ` Zefram 2003-01-28 16:42 ` Bart Schaefer @ 2003-02-03 12:51 ` Clemens Fischer 2 siblings, 0 replies; 8+ messages in thread From: Clemens Fischer @ 2003-02-03 12:51 UTC (permalink / raw) To: zsh-workers Oliver Kiddle <okiddle@yahoo.co.uk>: > _bash_complete() { > local ret=1 > local -a suf matches > local COMP_POINT COMP_CWORD > local -a COMP_WORDS COMPREPLY BASH_VERSINFO > local COMP_LINE="$words" > > (( COMP_POINT = ${#${(j. .)words}} + $$#QIPREFIX + $#IPREFIX + $#PREFIX )) > (( COMP_CWORD = CURRENT - 1)) > COMP_WORDS=( $words ) > BASH_VERSINFO=( 2 05b 0 1 release ) > > [[ ${argv[${argv[(I)nospace]:-0}-1]} = -o ]] && suf=( -S '' ) > [...] this is nice. i learn much more about zsh mechanics now that i can compare known functions with their zsh equivalent! one thing, though: you provide this patch, a patch to it and another one on top of the last. would you please post the complete version, all goodies included? clemens ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-02-03 13:12 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-01-28 9:18 bash completion functions Oliver Kiddle 2003-01-28 9:25 ` Zefram 2003-01-28 16:42 ` Bart Schaefer 2003-01-29 10:17 ` Oliver Kiddle 2003-01-29 11:16 ` Peter Stephenson 2003-01-29 11:26 ` Peter Stephenson 2003-01-29 14:11 ` Oliver Kiddle 2003-02-03 12:51 ` Clemens Fischer
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).