41725: assorted minor updates to completion functions

This commit is contained in:
Oliver Kiddle 2017-09-18 15:53:29 +02:00
parent b0c12e3771
commit b138acf42e
15 changed files with 107 additions and 57 deletions

View file

@ -1,5 +1,16 @@
2017-09-18 Oliver Kiddle <opk@zsh.org>
* 41725: Completion/BSD/Command/_sysrc,
Completion/Linux/Command/_mii-tool,
Completion/Redhat/Command/_scl, Completion/Unix/Command/_env,
Completion/Unix/Command/_dhclient,
Completion/Unix/Command/_getfacl, Completion/Unix/Command/_gpg,
Completion/Unix/Command/_ls, Completion/Unix/Command/_screen,
Completion/Unix/Command/_setfacl,
Completion/Unix/Command/_strip, Completion/Unix/Command/_truss,
Completion/Unix/Command/_vim, Completion/Unix/Command/_wget:
assorted minor updates to completion functions
* 41724: Completion/Linux/Command/_ethtool: update
completion for new options

View file

@ -44,9 +44,13 @@ _sysrc() {
local k v opt
if (( $+opt_args[lista--L] )); then
_services && ret=0
elif [[ -prefix *=* ]]; then
# do you really want to go down this hole?
_message -e values value
elif compset -P 1 '*='; then
case $IPREFIX in
*_enable=) _wanted values expl value compadd YES NO && ret=0 ;;
*_program=) _files -g "*(-*)" && ret=0 ;;
*_interface(|s)=) _net_interfaces && ret=0 ;;
*) _message -e values value ;;
esac
else
if zstyle -T ":completion:${curcontext%:*}:values" verbose; then
opt=d

View file

@ -1,12 +1,13 @@
#compdef mii-tool
_arguments -s \
'(-V --version)'{-V,--version}'[display version information]' \
_arguments -s -S \
'(- *)'{-V,--version}'[display version information]' \
'(-v --verbose)'{-v,--verbose}'[verbose output]' \
'(-R --reset)'{-R,--reset}'[reset MII to poweron state]' \
'(-r --restart)'{-r,--restart}'[restart autonegotiation]' \
'(-w --watch)'{-w,--watch}'[monitor for link status changes]' \
'(-l --log)'{-l,--log}'[write events to syslog]' \
'(-A --advertise)'{-A,--advertise=}'[advertise only specified media]:medium:_values -s , medium 100baseT4 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD 100baseTx 10baseT' \
'(-A --advertise)'{-A,--advertise=}'[advertise only specified media]:medium:_values -s , medium 1000baseTx-HD 1000baseTx-FD 100baseT4 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD 1000baseTx 100baseTx 10baseT' \
'(-F --force)'{-F,--force=}'[force specified medium]:medium:(100baseT4 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD 100baseTx 10baseT)' \
'(-p --phy)'{-p,--phy=}'[set PHY (MII address) to report]:MII address' \
'*:interface:_net_interfaces'

View file

@ -8,7 +8,7 @@ local -a state line force alts cmd
_arguments -C $force \
'(- 1)'{-l,--list}'[list installed software collections or packages within a collection]' \
'(-l --list)1:action:(enable run load unload list-collections list-packages man register deregister)' \
'(-l --list)1:action:(enable run load unload list-collections list-enabled list-packages man register deregister)' \
'(- *)--help' \
'(-)*:collections:->collections' && ret=0

View file

@ -60,6 +60,7 @@ case $OSTYPE in
'-V[specify vendor-class-identifier option]:option'
'--request-options[specify list of options the client is to request from the server]:options'
'--timeout[specify time after which dhclient will decide that no DHCP servers can be contacted]:timeout'
'--dad-wait-time[specify maximum time to wait for duplicate address detection]:time (seconds)'
)
;;
esac

View file

@ -7,7 +7,8 @@ case $variant in
gnu)
args=(
'(-)'{-i,--ignore-environment}'[start with empty environment]'
'(--ignore-environment -i --help --version)*'{-u,--unset=}'[remove variable from the environment]:env var to remove:_parameters -g "*export*"'
'(--ignore-environment -i --help --version)*'{-u+,--unset=}'[remove variable from the environment]:env var to remove:_parameters -g "*export*"'
'(-C --chdir)'{-C+,--chdir=}'[change working directory]:directory:_directories'
'(- *)--help[display help information]'
'(- *)--version[display version information]'
)

View file

@ -11,19 +11,19 @@ _arguments -s -S \
'*: :_files'
else
_arguments -s -S \
'--access[display the file access control list only]' \
'(-a --access)'{-a,--access}'[display the file access control list only]' \
'(-d --default)'{-d,--default}'[display the default access control list only]' \
'--omit-header[do not display the comment header]' \
'--all-effective[print all effective rights]' \
'--no-effective[print no effective rights]' \
'--skip-base[skip files that only have the base entries]' \
'(-c --omit-header)'{-c,--omit-header}"[don't display the comment header]" \
'(-e --all-effective)'{-e,--all-effective}'[print all effective rights]' \
'(-E --no-effective)'{-E,--no-effective}'[print no effective rights]' \
'(-s --skip-base)'{-s,--skip-base}'[skip files that only have the base entries]' \
'(-R --recursive)'{-R,--recursive}'[recurse into subdirectories]' \
'(-L --logical)'{-L,--logical}'[logical walk, follow symbolic links]' \
'(-P --physical)'{-P,--physical}'[physical walk, do not follow symbolic links]' \
'--tabular[use tabular output format]' \
'--numeric[print numeric user/group identifiers]' \
'--absolute-names[don'"'"'t strip leading '"'"'/'"'"' in pathnames]' \
'--version[print version and exit]' \
'--help[this help text]' \
'(-P --physical)'{-P,--physical}"[physical walk, don't follow symbolic links]" \
'(-t --tabular)'{-t,--tabular}'[use tabular output format]' \
'(-n --numeric)'{-n,--numeric}'[print numeric user/group identifiers]' \
'(-p --absolute-names)'{-p,--absolute-names}"[don't strip leading '/' in pathnames]" \
'(- *)'{-v,--version}'[display version information]' \
'(- *)'{-h,--help}'[display help information]' \
'*: :_files'
fi

View file

@ -38,17 +38,17 @@ fi
[[ $service = gpg ]] && args+=(
'--decrypt-files[decrypt multiple files]'
'(-b --detach-sign)'{-b,--detach-sign}'[make a detached signature]'
'--clearsign[make a clear text signature]'
--clear{,-}sign'[make a clear text signature]'
'--store[store only]'
'--verify[verify a signature]'
'--verify-files[verify a list of files]'
'(-f --encrypt-files)'{-f,--encrypt-files}'[encrypt files]'
'--list-keys[list all keys]'
'(-k --list-keys)'{-k,--list-keys}'[list all keys]'
'--list-public-keys[list all public keys]'
'--list-secret-keys[list all secret keys]'
'--list-sigs[lists keys and signatures]:key attachment:->public-keys'
'--list-options[modify what the various --list-* commands show]'
'--check-sigs[list key, signatures and check them]:key attachment:->public-keys'
'(-K --list-secret-keys)'{-K,--list-secret-keys}'[list all secret keys]'
--list-sig{,nature}s'[lists keys and signatures]:key attachment:->public-keys'
'--list-options[modify what the various --list-* commands show]: :->option-list'
--check-sig{,nature}s'[list key, signatures and check them]:key attachment:->public-keys'
'--fingerprint[list all keys with their fingerprints]:key attachment:->public-keys'
'--list-packets[list only the sequence of packets]'
'--gen-key[generate a new pair key]'
@ -60,6 +60,7 @@ fi
'--delete-secret-and-public-keys:key attachment:->secret-keys'
'--gen-revoke[generate a revocation certificate]'
'--desig-revoke[generate a designated revocation certificate]'
'--passwd[change a passphrase]'
'--export[export all keys from all keyrings]'
'--send-keys[send keys to a keyserver]:key attachment:->public-keyids'
'--export-secret-keys:key attachment:->secret-keys'
@ -67,7 +68,7 @@ fi
'--import[import a gpg key from a file]:attachment (file):_files'
'--fast-import[import a file without adding to trustdb]:attachment (file):_files'
'--fetch-keys[fetch key at URIs]:uri:'
'--recv-keys[receive a list of keys from a keyserver]:key attachment:->public-keyids'
--rec{eive,v}-keys'[receive a list of keys from a keyserver]:key attachment:->public-keyids'
'--refresh-keys[update all keys from a keyserver]'
'--search-keys[search for keys on a key server]'
'--update-trustdb[update the trust database]'
@ -79,7 +80,11 @@ fi
'--enarmor[en-Armor a file or stdin]'
'--print-md[print message digests]:algorithm:->ciphers::file:_files'
'--print-mds[print message digests]::file:_files'
'--gen-random:count' '--gen-prime'
'--tofu-policy:policy:(good unknown bad ask auto):*:keys:->public-keys'
'--tofu-default-policy:policy:(good unknown bad ask auto)'
'--quick-generate-key:user-id: :algorithm:(default future-default rsa dsa elg ed25519 cv25519): : _values -s , usage - default sign auth encr::expiration'
'--quick-add-key:fingerprint: :algorithm:(default future-default rsa dsa elg ed25519 cv25519): : _values -s , usage - default sign auth encr::expiration'
'--gen-random:quality level:(0 1 2):count (bytes)' '--gen-prime'
'--warranty[print warranty info]'
'(-a --armor)'{-a,--armor}'[create ASCII armored output]'
'--default-key[specify default user ID for signatures]:key:->secret-keys'
@ -126,11 +131,11 @@ fi
'--s2k-mode:value'
'--compress-algo:compression algorithm:((0\:disable\ compression 1\:zlib 2\:rfc1950))'
'--personal-'{cipher,digest,compress}'-preferences:string'
'--card-edit[present smartcard menu]' '--card-status[show smartcard content]'
--{card-edit,edit-card}'[present smartcard menu]' '--card-status[show smartcard content]'
'--change-pin[present menu to change smartcard pin]'
'--list-config[display internal configuration parameters]'
'--hidden-recipient[hidden recipient]:recipient:->public-keys'
'--dump-options[show all options]' '--default-preference-list:string'
'--default-preference-list:string'
'--fetch-keys:URIs'
'--hidden-encrypt-to:recipient:->public-keys'
'--compress-level:integer'
@ -139,17 +144,14 @@ fi
'--max-output[maximum output generated when processing file]:bytes:'
'--gpg-agent-info[override GPG_AGENT_INFO]:'
'--primary-keyring:file:_files'
'--verify-options:parameters:_multi_parts -q -S, ","
"(show-photos show-policy-urls show-notations show-std-notations
show-user-notations show-keyserver-urls show-uid-validity show-unusable-uids
show-primary-uid-only pka-lookups pka-trust-increase)"'
'--verify-options: :->verify-options'
'--debug:flags:' '--status-file:file:_files'
'--attribute-file:file:_files' '--load-extension:file:_files'
'--s2k-count:integer'
'--sig-notation:name=value:' '--cert-notation:name=value:'
'--passphrase-file:file:_files' '--passphrase-repeat:integer:'
'--command-file:file:_files' '--trustdb-name:file:_files'
'--trust-model:trust model:((pgp classic direct always auto))'
'--trust-model:trust model:(pgp classic tofu tofu+pgp direct always auto)'
'--sig-policy-url:string:' '--cert-policy-url:string:'
'--sig-keyserver-url:string:' '--comment[comment]:comment:'
'--no-comments[disable comments]'
@ -163,8 +165,8 @@ fi
'--multifile[process multiple files]'
'--keyid-format[key id format]:key format:((short 0xshort long 0xlong))'
'--exit-on-status-write-error[exit immediately on error write]'
'--limit-card-insert-tries:integer:'
'--reader-port[card reader port]:port:'
'--limit-card-insert-tries:integer'
'--reader-port[card reader port]:port'
'--ctapi-driver[file to use to access smartcard reader]:file:_files'
'--pcsc-driver[file to use to access smartcard reader]:file:_files'
'--auto-key-locate:parameters'
@ -176,7 +178,7 @@ extra=( ${allopts:|extra} )
_arguments -C -s -S -A "-*" $args $extra '*:args:->args' && ret=0
if [[ $state = args ]]; then
if (( ${+opt_args[--export]} || ${+opt_args[--list-keys]} || ${+opt_args[--list-public-keys]} )); then
if (( ${+opt_args[--export]} || ${+opt_args[-k]} || ${+opt_args[--list-keys]} || ${+opt_args[--list-public-keys]} )); then
state=public-keys
elif (( ${+opt_args[--list-secret-keys]} )); then
state=secret-keys
@ -205,19 +207,27 @@ fi
case "$state" in
public-keys)
_wanted public-keys expl 'public key' \
compadd ${${(Mo)$(_call_program public-keys gpg $needed --list-public-keys --list-options no-show-photos 2>/dev/null):%<*>}//(<|>)/} && return
compadd ${${(Mo)$(_call_program public-keys $words[1] $needed --list-public-keys --list-options no-show-photos):%<*>}//(<|>)/} && return
;;
secret-keys)
_wanted secret-keys expl 'secret key' compadd \
${${(Mo)$(_call_program secret-keys gpg $needed --list-secret-keys --list-options no-show-photos 2>/dev/null):%<*>}//(<|>)/} && return
${${(Mo)$(_call_program secret-keys $words[1] $needed --list-secret-keys --list-options no-show-photos):%<*>}//(<|>)/} && return
;;
ciphers)
_wanted ciphers expl cipher compadd \
${${(s.,.)${(M)${(f)"$(_call_program ciphers gpg $needed --version)"}:#Cipher*}#*:}# } && return
${${(s.,.)${(M)${(f)${"$(_call_program ciphers $words[1] $needed --version)"}//,$'\n' #/, }:#Cipher*}#*:}# } && return
;;
(public-keyids)
_wanted public-keys expl 'public keyid' \
compadd ${${${(M)${(f)"$(_call_program public-keyids gpg $needed --list-public-keys --list-options no-show-photos 2>/dev/null)"}:%pub*}#pub */}%% *} && return
compadd ${(M)${${(f)"$(_call_program public-keyids $words[1] $needed --list-public-keys --list-options no-show-photos)"}## #}:#[0-9A-F](#c40)} && return
;;
(option-list)
_sequence _wanted options expl option \
compadd - {no-,}show-{photos,usage,policy-urls,{std,user}-notations,keyserver-urls,uid-validity,unusable-{uids,subkeys},keyring,sig-{expire,subpackets}} && return
;;
(verify-options)
_sequence _wanted options expl option \
compadd - {no-,}show-{photos,policy-urls,{std,user}-notations,keyserver-urls,uid-validity,unusable-uids,primary-uid-only} {no-,}pka-{lookups,trust-increase} && return
;;
esac

View file

@ -168,6 +168,7 @@ else
'--color=-[control use of color]:color:(never always auto)'
"*--hide=[like -I, but overridden by -a or -A]:pattern: "
'--hyperlink=[output terminal codes to link files using file::// URI]::when:(none auto always)'
'(--classify -F --indicator-style -p --file-type)'{--classify,-F}'[append file type indicators]'
'(--file-type -p --indicator-style -F --classify)--file-type[append file type indicators except *]'
'(--file-type -p --indicator-style -F --classify)-p[append / to directories]'

View file

@ -66,14 +66,16 @@ _arguments -C \
'-f-[set flow control]:flow control:((n\:flow\ control\ off a\:flow\ control\ auto \:flow\ control\ on))' \
'-h[set the size of the scrollback history buffer]:buffer size' \
'-i[interrupt output sooner when flow control is on]' \
'(-l)-ln[login mode off (do not update utmp database)]' \
"(-l)-ln[login mode off (don't update utmp database)]" \
'(-ln)-l[login mode on (update utmp database)]' \
'(-)'{-ls,-list}'[list sessions/socket directory]' \
'(- *)'{-ls,-list}'[list sessions/socket directory]: :->any-sessions' \
"-L[terminal's last character can be safely updated]" \
'-Logfile[set logfile name]:log file:_files' \
'-m[ignore $STY variable, do create a new screen session]' \
'-O[choose optimal output rather than exact vt100 emulation]' \
'-p[preselect the named window]:window number or name:((\=\:windowlist -\:blank\ window \:window\ number))' \
'-q[quiet startup, exit with non-zero return code if unsuccessful]' \
'-Q[send response to stdout of command qwery process]:screen command:(echo info lastmsg number select time title windows)' \
'-r[reattach to a detached screen process]: :->detached-sessions' \
'-Dr: :->any-sessions' \
'-dr: :->any-sessions' \
@ -85,12 +87,12 @@ _arguments -C \
"-t[set title (window's name)]:title" \
'-T[use term as $TERM for windows, rather than "screen"]:terminal type:_terminals' \
'-U[tell screen to use UTF-8 encoding]' \
'(-)-v[print screen version]' \
'(-)-wipe[do nothing, clean up SockDir]' \
'(- *)-v[print screen version]' \
'(- *)-wipe[do nothing, clean up SockDir]: :->any-sessions' \
'-x[attach to a not detached screen (multi display mode)]: :->attached-sessions' \
'-Dx: :->any-sessions' \
'-dx: :->any-sessions' \
'-X[execute command as a screen command in the specified session]:screencmd:(${scr_cmds[@]})' \
'-X[execute command as a screen command in the specified session]:screen command:(${scr_cmds[@]})' \
'*:: :->normal' && ret=0
if [[ -n $state ]]; then

View file

@ -29,7 +29,7 @@ _arguments -s -S \
'(-P --physical)'{-P,--physical}'[physical walk, do not follow symbolic links]' \
'--restore=[restore ACLs]:file:_files' \
'--test[test mode (ACLs are not modified)]' \
'--version[print version and exit]' \
'--help[this help text]' \
'(- *)'{-v,--version}'[display version information]' \
'(- *)'{-h,--help}'[display help information]' \
'*: :_files'
fi

View file

@ -25,6 +25,7 @@ if _pick_variant gnu=GNU solaris --version; then
'(-s --strip-all)'{-s,--strip-all}'[remove all symbols]'
'(-g -S -d --strip-debug)'{-g,-S,-d,--strip-debug}'[remove debugging symbols]'
'--strip-unneeded[remove symbols not needed for relocation processing]'
"--no-merge-notes[don't attempt to remove redundant notes]"
'*'{-K+,--keep-symbol=}'[keep given symbol]:symbol name'
'*'{-N+,--strip-symbol=}'[strip given symbol]:symbol name'
'(*)-o+[output file]:output file:_files'

View file

@ -15,6 +15,9 @@ args=(
)
case $OSTYPE in
solaris2.<11->)
args+=( '(-c)-A[include absolute timestamps in output]' )
;|
aix*|solaris*)
args+=(
'(-c)-E[include delta timestamps of time spent within the system call]'

View file

@ -1,4 +1,4 @@
#compdef vim gvim gex gview nvim rvim rview rgvim rgview evim eview vimdiff gvimdiff
#compdef vim gvim gex gview nvim rvim rview rgvim rgview evim eview vimdiff gvimdiff mvim
(( $+functions[_vim_files] )) ||
_vim_files () {
@ -99,7 +99,7 @@ if [[ "$state" = server ]]; then
elif [[ $state = verbosity ]]; then
_tags numbers files
while _tags; do
_requested numbers && _describe 'verbosity [10]' "(
_requested numbers && _describe -V 'verbosity [10]' "(
0:don\'t' display any messages'
1:'display when viminfo file is read or written'
2:'display sourced files'

View file

@ -1,6 +1,6 @@
#compdef wget
local curcontext="$curcontext" state line
local curcontext="$curcontext" state line expl
typeset -A opt_args
_arguments -C -s \
@ -19,12 +19,15 @@ _arguments -C -s \
'(--force-html -F)'{--force-html,-F}'[treat input file as html]' \
'(--base -B)'{--base=,-B+}'[prepend URL to relative links]:base URL:_urls' \
'--config=[specify config file]:config file:_files' \
'(--config)--no-config' '--rejected-log=:file:_files' \
'(--tries -t)'{--tries=,-t+}'[set number of retries]:number of retries' \
'--retry-connrefused[retry even if connection is refused]' \
'(--output-document -O)'{--output-document=,-O+}'[specify file to write documents to]:output file:_files' \
'(--continue -c)'{--continue,-c}'[continue getting an existing file]' \
'--start-pos=:offset' '--show-progress' \
'--progress=[set progress gauge type]:gauge type:->gauge' \
'(--timestamping -N)'{--timestamping,-N}'[retrieve only files newer than existing]' \
'--no-if-modified-since' \
"--no-use-server-timestamps[don't set the local file's timestamp by the one on the server]" \
'(--server-response -S)'{--server-response,-S}'[print server response]' \
"--spider[don't download anything]" \
@ -49,11 +52,15 @@ _arguments -C -s \
'(--http-user --ftp-user)--user[set both ftp and http user]:user' \
'(--http-password --ftp-password)--password[set both ftp and http password]:password' \
'(--password --http-password --ftp-password)--ask-password:[prompt for passwords]' \
'--use-askpass=:command:_command_names -e' \
'--no-iri[turn off IRI support]' \
'--local-encoding=[specify local encoding for IRIs]:encoding' \
'--remote-encoding=[specify default remote encoding]:encoding' \
'--unlink[remove file before clobber]' \
'--no-xattr[turn off storage of metadata in extended file attributes]' \
'(-nd --no-directories)'{-nd,--no-directories}"[don't create directories]" \
'(--force-directories -x)'{--force-directories,-x}'[force creation of directories]' \
'(-nH --no-host-directories)'{-nH,--no-host-directories}"[don't create host directories]" \
'--protocol-directories[use protocol name in directories]' \
'(--directory-prefix -P)'{--directory-prefix=,-P+}'[specify prefix to save files to]:prefix:_files -/' \
'--cut-dirs=:number:' \
@ -92,15 +99,20 @@ _arguments -C -s \
'--private-key-type=[specify private key type]:key type:key type:(PEM DER)' \
"--ca-certificate=[specify file with bundle of CA's]:file:_files" \
"--ca-directory=[specify dir where hash list of CA's are stored]:directory:_directories" \
'--crl-file=[specify file with bundle of CRLs]:file:_files' \
'--pinnedpubkey=:file:_files' \
'--random-file[specify file with random data for seeding generator]:file:_files' \
'--egd-file=[specify filename of EGD socket]:file:_files' \
'--no-hsts[disable HSTS]' \
'--hsts-file[specify path of HSTS database]:file:_files' \
'(--user)--ftp-user=:user' \
'(--password --ask-password)--ftp-password=:password' \
"--no-remove-listing[don't remove \`.listing' files]" \
'--no-glob[turn off FTP file name globbing]' \
'--no-passive-ftp' \
'--preserve-permissions[preserve remote file permissions with ftp]' \
'--retr-symlinks' \
--retr-symlinks --ftps-implicit --ftps-resume-ssl \
--ftps-clear-data-connection --ftps-fallback-to-ftp \
'--warc-file=:file:_files' --warc-header=:string --warc-max-size=:number \
--warc-cdx --warc-dedup=:file:_files --no-warc-compression --no-warc-digests \
--no-warc-keep-log --warc-tempdir=:directory:_directories \
@ -108,6 +120,7 @@ _arguments -C -s \
'(--level -l)'{--level=,-l+}'[specify maximum recursion depth]:level' \
'--delete-after' \
'(--convert-links -k)'{--convert-links,-k}'[convert links to be relative]' \
--convert-file-only \
'--backups=:max backups' \
'(--backup-converted -K)'{--backup-converted,-K}'[backup files before conversion]' \
'(--mirror -m -r -N -l)'{--mirror,-m}'[mirror (-r -N -l inf --no-remove-listing)]' \
@ -129,8 +142,6 @@ _arguments -C -s \
'(-np --no-parent)'{-np,--no-parent}"[don't ascend to parent directory]" \
'--no-verbose' \
'--no-clobber' \
'--no-directories' \
'--no-host-directories' \
'--no-use-server-timestamps[do not set timestamp to server provided value]' \
'--htmlify=:htmlify:' \
'--no:no:->noflags' \
@ -154,10 +165,15 @@ case "$state" in
_values -s , 'filename char restriction' \
'(windows)unix' \
'(unix)windows' \
'(unix windows)nocontrol'
'(unix windows)nocontrol' \
ascii \
'(uppercase)lowercase' \
'(lowercase)uppercase'
;;
header)
local -a headers
local suf=': '
compquote suf
headers=(
Accept{,-{Charset,Encoding,Language,Datetime}}
Authorization
@ -191,7 +207,6 @@ case "$state" in
X-ATT-DeviceId
X-Wap-Profile
)
headers=($^headers\\:\ )
_describe -t header 'HTTP header' headers
_wanted headers expl 'HTTP header' compadd -S $suf -a headers
;;
esac