diff options
author | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-04-02 11:10:44 +0000 |
---|---|---|
committer | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-04-02 11:10:44 +0000 |
commit | 4dd6dce505b3f515664ce007845ea75ab564a91b (patch) | |
tree | 8938c743cfdab1c29b411143a7aa51616ccdf81e | |
parent | 71f2dbfad7535f1335e8cd382bf8c9c6ef6360b7 (diff) | |
download | zsh-4dd6dce505b3f515664ce007845ea75ab564a91b.tar.gz zsh-4dd6dce505b3f515664ce007845ea75ab564a91b.tar.xz zsh-4dd6dce505b3f515664ce007845ea75ab564a91b.zip |
moved from Completion/Base/_describe
-rw-r--r-- | Completion/Base/Utility/_describe | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Completion/Base/Utility/_describe b/Completion/Base/Utility/_describe new file mode 100644 index 000000000..a658d16df --- /dev/null +++ b/Completion/Base/Utility/_describe @@ -0,0 +1,62 @@ +#autoload + +# This can be used to add options or values with descriptions as matches. + +local _opt _expl _tmps _tmpd _tmpmd _tmpms _ret=1 _showd _nm _hide _args +local _type=values _descr + +# Get the option. + +if [[ "$1" = -o ]]; then + _type=options + shift +elif [[ "$1" = -t ]]; then + _type="$2" + shift 2 +elif [[ "$1" = -t* ]]; then + _type="${1[3,-1]}" + shift +fi + +# Do the tests. `showd' is set if the descriptions should be shown. + +zstyle -T ":completion:${curcontext}:$_type" verbose && _showd=yes + +_descr="$1" +shift + +[[ "$_type" = options ]] && + zstyle -t ":completion:${curcontext}:options" prefix-hidden && _hide=yes + +_tags "$_type" +while _tags; do + while _next_label "$_type" _expl "$_descr"; do + + if [[ -n "$_showd" ]]; then + compdescribe -I ' -- ' "$@" + else + compdescribe -i "$@" + fi + + while compdescribe -g _args _tmpd _tmpmd _tmps _tmpms; do + + # See if we should remove the option prefix characters. + + if [[ -n "$_hide" ]]; then + if [[ "$PREFIX" = --* ]]; then + _tmpd=( "${(@)_tmpd#--}" ) + _tmps=( "${(@)_tmps#--}" ) + elif [[ "$PREFIX" = [-+]* ]]; then + _tmpd=( "${(@)_tmpd#[-+]}" ) + _tmps=( "${(@)_tmps#[-+]}" ) + fi + fi + + compadd "$_args[@]" "$_expl[@]" -ld _tmpd -a _tmpmd && _ret=0 + compadd "$_args[@]" "$_expl[@]" -d _tmps -a _tmpms && _ret=0 + done + done + (( _ret )) || return 0 +done + +return 1 |