summaryrefslogtreecommitdiffstats
path: root/Completion/Base/_complete_opts
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-07-24 14:01:54 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-07-24 14:01:54 +0000
commit14810d6df13e0564a606b74e4c4e918e80862e25 (patch)
tree0e24a6c6b0226a90bdf8398ce94b60fdc9a87b0e /Completion/Base/_complete_opts
parentzsh-3.1.6-test-2 (diff)
downloadzsh-14810d6df13e0564a606b74e4c4e918e80862e25.tar
zsh-14810d6df13e0564a606b74e4c4e918e80862e25.tar.gz
zsh-14810d6df13e0564a606b74e4c4e918e80862e25.tar.bz2
zsh-14810d6df13e0564a606b74e4c4e918e80862e25.tar.lz
zsh-14810d6df13e0564a606b74e4c4e918e80862e25.tar.xz
zsh-14810d6df13e0564a606b74e4c4e918e80862e25.tar.zst
zsh-14810d6df13e0564a606b74e4c4e918e80862e25.zip
zsh-3.1.6-test-3dot-zsh-199907241534
Diffstat (limited to 'Completion/Base/_complete_opts')
-rw-r--r--Completion/Base/_complete_opts88
1 files changed, 88 insertions, 0 deletions
diff --git a/Completion/Base/_complete_opts b/Completion/Base/_complete_opts
new file mode 100644
index 000000000..689e13e22
--- /dev/null
+++ b/Completion/Base/_complete_opts
@@ -0,0 +1,88 @@
+#autoload
+
+# Usage:
+# _complete_opts H '' f '_files'
+
+emulate -L zsh
+setopt extendedglob
+
+local done=yes
+
+typeset -A option_pairs
+option_pairs=("$@")
+typeset -a no_arg with_arg opt_arg
+no_arg=($option_pairs[(I)?])
+opt_arg=($option_pairs[(I)?::]:s/:://)
+with_arg=($option_pairs[(I)?:]:s/:// $opt_arg)
+
+case "${#no_arg}-${#with_arg}" in
+ 0-0)
+ if [[ x$PREFIX = x-* ]]; then
+ compadd -nQ - "$PREFIX$SUFFIX"
+ else
+ done=''
+ fi
+ ;;
+
+ 0-*)
+ if [[ x$PREFIX = x- ]]; then
+ IPREFIX="$IPREFIX$PREFIX"
+ PREFIX=
+ compadd $with_arg
+ elif [[ x$PREFIX = x-[${(j::)with_arg}] ]]; then
+ IPREFIX="$IPREFIX$PREFIX"
+ PREFIX=
+ eval $option_pairs[$IPREFIX[-1]:]
+ elif [[ x$PREFIX = x-[${(j::)with_arg}]* ]]; then
+ local p="$PREFIX[1,(r)[${(j::)with_arg}]]"
+ IPREFIX="$IPREFIX$p"
+ PREFIX="$PREFIX[$#p + 1,-1]"
+ eval $option_pairs[$IPREFIX[-1]:]
+ elif [[ x$words[$CURRENT-1] = x-[${(j::)with_arg}] ]]; then
+ local p="$words[$CURRENT - 1]"
+ eval $option_pairs[$p[-1]:]
+ else
+ done=''
+ fi
+ ;;
+
+ *-0)
+ if [[ x$PREFIX = x-[${(j::)no_arg}]# ]]; then
+ IPREFIX="$IPREFIX$PREFIX"
+ PREFIX=
+ compadd $no_arg
+ else
+ done=''
+ fi
+ ;;
+
+ *-*)
+ if [[ x$PREFIX = x-[${(j::)no_arg}]# ]]; then
+ IPREFIX="$IPREFIX$PREFIX"
+ PREFIX=
+ compadd $no_arg
+ compadd $with_arg
+ elif [[ x$PREFIX = x-[${(j::)no_arg}]#[${(j::)with_arg}] ]]; then
+ IPREFIX="$IPREFIX$PREFIX"
+ PREFIX=
+ eval $option_pairs[$IPREFIX[-1]:]
+ elif [[ x$PREFIX = x-[${(j::)no_arg}]#[${(j::)with_arg}]* ]]; then
+ local p="$PREFIX[1,(r)[${(j::)with_arg}]]"
+ IPREFIX="$IPREFIX$p"
+ PREFIX="$PREFIX[$#p + 1,-1]"
+ eval $option_pairs[$IPREFIX[-1]:]
+ elif [[ x$words[$CURRENT-1] = x-[${(j::)no_arg}]#[${(j::)with_arg}] ]]; then
+ local p="$words[$CURRENT - 1]"
+ eval $option_pairs[$p[-1]:]
+ else
+ done=''
+ fi
+ ;;
+esac
+
+if [[ -z "$done" ]]; then
+ compadd - -${(k)^option_pairs:gs/://}
+ false
+else
+ true
+fi