about summary refs log tree commit diff
path: root/Completion/Debian
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Debian')
-rw-r--r--Completion/Debian/_apt331
1 files changed, 165 insertions, 166 deletions
diff --git a/Completion/Debian/_apt b/Completion/Debian/_apt
index d73b0df85..f4ed69a45 100644
--- a/Completion/Debian/_apt
+++ b/Completion/Debian/_apt
@@ -17,7 +17,7 @@ _apt_arguments () {
   funcname="$1"
   shift
 
-  typeset -A canonicalize options
+  typeset -A canonicalize num_options
   local short_hasarg short_bool short_intlevel short_configfile short_arbitem
   local long_hasarg long_bool long_intlevel long_configfile long_arbitem
   local comp_hasarg=''
@@ -28,11 +28,11 @@ _apt_arguments () {
     type="${1#*:}"
 
     case $type in
-      bool) options[$opts]=1;;
-      intlevel) options[$opts]=-1;;
-      configfile) options[$opts]=1;;
-      arbitem) options[$opts]=-1;;
-      *) options[$opts]=1
+      bool) num_options[$opts]=1;;
+      intlevel) num_options[$opts]=-1;;
+      configfile) num_options[$opts]=1;;
+      arbitem) num_options[$opts]=-1;;
+      *) num_options[$opts]=1
 	 comp_hasarg="${comp_hasarg}$opts) $type;;"$'\n'
 	 type=hasarg;;
     esac
@@ -82,25 +82,25 @@ _apt_arguments () {
   comp_short=\
 'if [[ $PREFIX = -'"$short_seq"' ]]; then
   _apt_consume_short ${PREFIX[2,-1]}
-  tmp1=(${(M)${(s:,:)${(kj:,:)options[(R)*~0]}}:#-?})
+  tmp1=(${(M)${(s:,:)${(kj:,:)num_options[(R)*~0]}}:#-?})
   tmp2=(${PREFIX}${^tmp1#-})
   _describe -o option tmp1 tmp2
 elif [[ -z "$PREFIX" ]]; then
-  tmp1=(${(M)${(s:,:)${(kj:,:)options[(R)*~0]}}:#-?})
+  tmp1=(${(M)${(s:,:)${(kj:,:)num_options[(R)*~0]}}:#-?})
   _describe -o option tmp1
 fi'
 
   comp_long=\
-'tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)options[(R)*~0]}}:#--*}#--}}"
+'tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)num_options[(R)*~0]}}:#--*}#--}}"
 tmp2=(--${(M)^long_bool:#$~tmp1} --${(M)^long_intlevel:#$~tmp1})
 tmp3=(--${(M)^long_hasarg:#$~tmp1} --${(M)^long_configfile:#$~tmp1} --${(M)^long_arbitem:#$~tmp1})
 _describe -o option tmp2 -- tmp3 -S= -- bool_prefix -S ""'
 
   comp_long_prefix=\
-'tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)options[(R)*~0]}}:#--*}#--}}"
+'tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)num_options[(R)*~0]}}:#--*}#--}}"
 tmp2=($_ra_left${(M)^long_bool:#$~tmp1} $_ra_left${(M)^long_intlevel:#$~tmp1})
 tmp3=($_ra_left${(M)^long_hasarg:#$~tmp1} $_ra_left${(M)^long_configfile:#$~tmp1} $_ra_left${(M)^long_arbitem:#$~tmp1})
-tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)options[(R)*~0]}}:#-?}#-}}"
+tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)num_options[(R)*~0]}}:#-?}#-}}"
 tmp2=("$tmp2[@]" $_ra_left${(M)^short_bool:#$~tmp1} $_ra_left${(M)^short_intlevel:#$~tmp1})
 tmp3=("$tmp3[@]" $_ra_left${(M)^short_hasarg:#$~tmp1} $_ra_left${(M)^short_configfile:#$~tmp1} $_ra_left${(M)^short_arbitem:#$~tmp1})
 _describe -o option tmp2 -- tmp3 -S='
@@ -113,203 +113,200 @@ _describe -o option tmp2 -- tmp3 -S='
 
   if (( $#short_hasarg )); then
     regex_short=("$regex_short[@]"
-      /"$short_seq(${(j:|:)short_hasarg})(=|)"
-	-'_apt_consume_short ${_ra_match%=}; current_option=${canonicalize[-${${_ra_match%=}[-1]}]}'
-	\( /"$word1" !"$comp_hasarg" \| /"$nul" /"$word" !"$comp_hasarg" \) \|
+      /"$short_seq(${(j:|:)short_hasarg})(=|)"/
+	-'_apt_consume_short ${match[1]%=}; current_option=${canonicalize[-${${match[1]%=}[-1]}]}'
+	\( /"$word1"/ :"$comp_hasarg" \| /"$nul"/ /"$word"/ :"$comp_hasarg" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)short_hasarg})$nul"
-	-'_apt_consume_short ${_ra_match[-2]}; current_option=${canonicalize[-${${_ra_match%$nul}[-1]}]}'
-	/"$word" !"$comp_hasarg" \|
-      /"(${(j:|:)short_hasarg})="
-	-'_apt_consume_short ${_ra_match[-2]}; current_option=${canonicalize[-${${_ra_match%=}[-1]}]}'
-	\( /"$word1" !"$comp_hasarg" \| /"$nul" /"$word" !"$comp_hasarg" \) \|
+      /"(${(j:|:)short_hasarg})$nul"/
+	-'_apt_consume_short ${match[1][-2]}; current_option=${canonicalize[-${${match[1]%$nul}[-1]}]}'
+	/"$word"/ :"$comp_hasarg" \|
+      /"(${(j:|:)short_hasarg})="/
+	-'_apt_consume_short ${match[1][-2]}; current_option=${canonicalize[-${${match[1]%=}[-1]}]}'
+	\( /"$word1"/ :"$comp_hasarg" \| /"$nul"/ /"$word"/ :"$comp_hasarg" \) \|
     )
   fi
 
   if (( $#short_bool )); then
     regex_short=("$regex_short[@]"
-      /"$short_seq(${(j:|:)short_bool})($nul(${(j:|:)bool})|(${(j:|:)bool})|)$nul"
-	-"_apt_consume_short \${_ra_match%%($nul(${(j:|:)bool})|(${(j:|:)bool})|)$nul}" \|
-      /"$short_seq(${(j:|:)short_bool})="
-	-"_apt_consume_short \${_ra_match%=}"
-	\( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \|
+      /"$short_seq(${(j:|:)short_bool})($nul(${(j:|:)bool})|(${(j:|:)bool})|)$nul"/
+	-"_apt_consume_short \${match[1]%%($nul(${(j:|:)bool})|(${(j:|:)bool})|)$nul}" \|
+      /"$short_seq(${(j:|:)short_bool})="/
+	-"_apt_consume_short \${match[1]%=}"
+	\( /"$word1"/ :"$comp_bool" \| /"$nul"/ /"$word"/ :"$comp_bool" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)short_bool})="
-	-"_apt_consume_short \${_ra_match[-2]}"
-	\( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \|
-      /"(${(j:|:)short_bool})$nul"
-	-"_apt_consume_short \${_ra_match[-2]}"
-	/"((${(j:|:)bool})$nul|)" !"$comp_bool" \|
+      /"(${(j:|:)short_bool})="/
+	-"_apt_consume_short \${match[1][-2]}"
+	\( /"$word1"/ :"$comp_bool" \| /"$nul"/ /"$word"/ :"$comp_bool" \) \|
+      /"(${(j:|:)short_bool})$nul"/
+	-"_apt_consume_short \${match[1][-2]}"
+	/"((${(j:|:)bool})$nul|)"/ :"$comp_bool" \|
     )
   fi
 
   if (( $#short_intlevel )); then
     regex_short=("$regex_short[@]"
-      /"$short_seq(${(j:|:)short_intlevel})($nul$intlevel|$intlevel|)$nul"
-	-"_apt_consume_short \${_ra_match%%($nul$intlevel|$intlevel|)$nul}" \|
-      /"$short_seq(${(j:|:)short_intlevel})="
-	-"_apt_consume_short \${_ra_match%=}"
-	\( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \|
+      /"$short_seq(${(j:|:)short_intlevel})($nul$intlevel|$intlevel|)$nul"/
+	-"_apt_consume_short \${match[1]%%($nul$intlevel|$intlevel|)$nul}" \|
+      /"$short_seq(${(j:|:)short_intlevel})="/
+	-"_apt_consume_short \${match[1]%=}"
+	\( /"$word1"/ :"$comp_intlevel" \| /"$nul"/ /"$word"/ :"$comp_intlevel" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)short_intlevel})="
-	-"_apt_consume_short \${_ra_match[-2]}"
-	\( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \|
-      /"(${(j:|:)short_intlevel})$nul"
-	-"_apt_consume_short \${_ra_match[-2]}"
-	/"($intlevel$nul|)" !"$comp_intlevel" \|
+      /"(${(j:|:)short_intlevel})="/
+	-"_apt_consume_short \${match[1][-2]}"
+	\( /"$word1"/ :"$comp_intlevel" \| /"$nul"/ /"$word"/ :"$comp_intlevel" \) \|
+      /"(${(j:|:)short_intlevel})$nul"/
+	-"_apt_consume_short \${match[1][-2]}"
+	/"($intlevel$nul|)"/ :"$comp_intlevel" \|
     )
   fi
 
   if (( $#short_configfile )); then
     regex_short=("$regex_short[@]"
-      /"$short_seq(${(j:|:)short_configfile})(=|)"
-	-"_apt_consume_short \${_ra_match%=}"
-	\( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \|
+      /"$short_seq(${(j:|:)short_configfile})(=|)"/
+	-"_apt_consume_short \${match[1]%=}"
+	\( /"$word1"/ :"$comp_configfile" \| /"$nul"/ /"$word"/ :"$comp_configfile" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)short_configfile})$nul"
-	-"_apt_consume_short \${_ra_match[-2]}"
-	/"$word" !"$comp_configfile" \|
-      /"(${(j:|:)short_configfile})="
-	-"_apt_consume_short \${_ra_match[-2]}"
-	\( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \|
+      /"(${(j:|:)short_configfile})$nul"/
+	-"_apt_consume_short \${match[1][-2]}"
+	/"$word"/ :"$comp_configfile" \|
+      /"(${(j:|:)short_configfile})="/
+	-"_apt_consume_short \${match[1][-2]}"
+	\( /"$word1"/ :"$comp_configfile" \| /"$nul"/ /"$word"/ :"$comp_configfile" \) \|
     )
   fi
 
   if (( $#short_arbitem )); then
     regex_short=("$regex_short[@]"
-      /"$short_seq(${(j:|:)short_arbitem})(=|)"
-	-"_apt_consume_short \${_ra_match%=}"
-	\( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \|
+      /"$short_seq(${(j:|:)short_arbitem})(=|)"/
+	-"_apt_consume_short \${match[1]%=}"
+	\( /"$word1"/ :"$comp_arbitem" \| /"$nul"/ /"$word"/ :"$comp_arbitem" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)short_arbitem})$nul"
-	-"_apt_consume_short \${_ra_match[-2]}"
-	/"$word" !"$comp_arbitem" \|
-      /"(${(j:|:)short_arbitem})="
-	-"_apt_consume_short \${_ra_match[-2]}"
-	\( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \|
+      /"(${(j:|:)short_arbitem})$nul"/
+	-"_apt_consume_short \${match[1][-2]}"
+	/"$word"/ :"$comp_arbitem" \|
+      /"(${(j:|:)short_arbitem})="/
+	-"_apt_consume_short \${match[1][-2]}"
+	\( /"$word1"/ :"$comp_arbitem" \| /"$nul"/ /"$word"/ :"$comp_arbitem" \) \|
     )
   fi
 
   if (( $#long_hasarg )); then
     regex_long=("$regex_long[@]"
-      /"(${(j:|:)long_hasarg})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}; current_option=\${canonicalize[--\${_ra_match%$nul}]}"
-	/"$word" !"$comp_hasarg" \|
-      /"(${(j:|:)long_hasarg})="
-	-"_apt_consume_long \${_ra_match%=}; current_option=\${canonicalize[--\${_ra_match%=}]}"
-	\( /"$word1" !"$comp_hasarg" \| /"$nul" /"$word" !"$comp_hasarg" \) \|
+      /"(${(j:|:)long_hasarg})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}; current_option=\${canonicalize[--\${match[1]%$nul}]}"
+	/"$word"/ :"$comp_hasarg" \|
+      /"(${(j:|:)long_hasarg})="/
+	-"_apt_consume_long \${match[1]%=}; current_option=\${canonicalize[--\${match[1]%=}]}"
+	\( /"$word1"/ :"$comp_hasarg" \| /"$nul"/ /"$word"/ :"$comp_hasarg" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)long_hasarg})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}; current_option=\${canonicalize[--\${_ra_match%$nul}]}"
-	/"$word" !"$comp_hasarg" \|
-      /"(${(j:|:)long_hasarg})="
-	-"_apt_consume_long \${_ra_match%=}; current_option=\${canonicalize[--\${_ra_match%=}]}"
-	\( /"$word1" !"$comp_hasarg" \| /"$nul" /"$word" !"$comp_hasarg" \) \|
+      /"(${(j:|:)long_hasarg})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}; current_option=\${canonicalize[--\${match[1]%$nul}]}"
+	/"$word"/ :"$comp_hasarg" \|
+      /"(${(j:|:)long_hasarg})="/
+	-"_apt_consume_long \${match[1]%=}; current_option=\${canonicalize[--\${match[1]%=}]}"
+	\( /"$word1"/ :"$comp_hasarg" \| /"$nul"/ /"$word"/ :"$comp_hasarg" \) \|
     )
   fi
 
   if (( $#long_bool )); then
     regex_long=("$regex_long[@]"
-      /"(${(j:|:)long_bool})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \|
-      /"(${(j:|:)long_bool})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"((${(j:|:)bool})$nul|)" !"$comp_bool" \|
+      /"(${(j:|:)long_bool})="/
+	-"_apt_consume_long xxx \${match[1]%=}"
+	\( /"$word1"/ :"$comp_bool" \| /"$nul"/ /"$word"/ :"$comp_bool" \) \|
+      /"(${(j:|:)long_bool})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"((${(j:|:)bool})$nul|)"/ :"$comp_bool" \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)long_bool})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_bool" \| /"$nul" /"$word" !"$comp_bool" \) \|
-      /"(${(j:|:)long_bool})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"((${(j:|:)bool})$nul|)" !"$comp_bool" \|
+      /"(${(j:|:)long_bool})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_bool" \| /"$nul"/ /"$word"/ :"$comp_bool" \) \|
+      /"(${(j:|:)long_bool})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"((${(j:|:)bool})$nul|)"/ :"$comp_bool" \|
     )
   fi
 
   if (( $#long_intlevel )); then
     regex_long=("$regex_long[@]"
-      /"(${(j:|:)long_intlevel})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \|
-      /"(${(j:|:)long_intlevel})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"($intlevel$nul|)" !"$comp_intlevel" \|
+      /"(${(j:|:)long_intlevel})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_intlevel" \| /"$nul"/ /"$word"/ :"$comp_intlevel" \) \|
+      /"(${(j:|:)long_intlevel})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"($intlevel$nul|)"/ :"$comp_intlevel" \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)long_intlevel})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"$intlevel" !"$comp_intlevel" /"$nul" \|
-      /"(${(j:|:)long_intlevel})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_intlevel" \| /"$nul" /"$word" !"$comp_intlevel" \) \|
-      /"(${(j:|:)long_intlevel})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"($intlevel$nul|)" !"$comp_intlevel" \|
+      /"(${(j:|:)long_intlevel})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_intlevel" \| /"$nul"/ /"$word"/ :"$comp_intlevel" \) \|
+      /"(${(j:|:)long_intlevel})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"($intlevel$nul|)"/ :"$comp_intlevel" \|
     )
   fi
 
   if (( $#long_configfile )); then
     regex_long=("$regex_long[@]"
-      /"(${(j:|:)long_configfile})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"$word" !"$comp_configfile" \|
-      /"(${(j:|:)long_configfile})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \|
+      /"(${(j:|:)long_configfile})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"$word"/ :"$comp_configfile" \|
+      /"(${(j:|:)long_configfile})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_configfile" \| /"$nul"/ /"$word"/ :"$comp_configfile" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)long_configfile})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"$word" !"$comp_configfile" \|
-      /"(${(j:|:)long_configfile})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_configfile" \| /"$nul" /"$word" !"$comp_configfile" \) \|
+      /"(${(j:|:)long_configfile})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"$word"/ :"$comp_configfile" \|
+      /"(${(j:|:)long_configfile})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_configfile" \| /"$nul"/ /"$word"/ :"$comp_configfile" \) \|
     )
   fi
 
   if (( $#long_arbitem )); then
     regex_long=("$regex_long[@]"
-      /"(${(j:|:)long_arbitem})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"$word" !"$comp_arbitem" \|
-      /"(${(j:|:)long_arbitem})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \|
+      /"(${(j:|:)long_arbitem})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"$word"/ :"$comp_arbitem" \|
+      /"(${(j:|:)long_arbitem})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_arbitem" \| /"$nul"/ /"$word"/ :"$comp_arbitem" \) \|
     )
     regex_long_prefix=("$regex_long_prefix[@]"
-      /"(${(j:|:)long_arbitem})$nul"
-	-"_apt_consume_long \${_ra_match%$nul}"
-	/"$word" !"$comp_arbitem" \|
-      /"(${(j:|:)long_arbitem})="
-	-"_apt_consume_long \${_ra_match%=}"
-	\( /"$word1" !"$comp_arbitem" \| /"$nul" /"$word" !"$comp_arbitem" \) \|
+      /"(${(j:|:)long_arbitem})$nul"/
+	-"_apt_consume_long \${match[1]%$nul}"
+	/"$word"/ :"$comp_arbitem"/ \|
+      /"(${(j:|:)long_arbitem})="/
+	-"_apt_consume_long \${match[1]%=}"
+	\( /"$word1"/ :"$comp_arbitem" \| /"$nul"/ /"$word"/ :"$comp_arbitem" \) \|
     )
   fi
 
   regex_all=(
-    /"$word"
-    \( %-- \( "$regex_long[@]"
-	      %"(${(j:|:)bool})-"
-	      \( "$regex_long_prefix[@]" /"[]" !"$comp_long_prefix" \) \|
-	      /"[]" !"$comp_long" \) \|
-       %- \( "$regex_short[@]" /"[]" !"$comp_short; $comp_long" \) \|
-       /"[]" !"$comp_opt" \) \#
+    /"$word"/
+    \( /--/+ \( "$regex_long[@]"
+		/"(${(j:|:)bool})-"/+
+		  \( "$regex_long_prefix[@]"
+		     /"[]"/ :"$comp_long_prefix" \) \) \|
+       /-/+ \( "$regex_short[@]" /"[]"/ \) \|
+       /"[]"/ :"$comp_opt" \) \#
     "$regex_all[@]"
   )
 
   _regex_arguments "${funcname}_sm" "$regex_all[@]"
 
   eval "$funcname () {
-    typeset -A canonicalize options
+    typeset -A canonicalize num_options
     canonicalize=(${(kv)canonicalize})
-    options=(${(kv)options})
+    num_options=(${(kv)num_options})
 
     local short_hasarg short_bool short_intlevel short_configfile short_arbitem
     local long_hasarg long_bool long_intlevel long_configfile long_arbitem
@@ -341,14 +338,16 @@ _apt_consume_short () {
   local short opt
   for short in ${(s::)1}; do
     opt="$canonicalize[-$short]"
-    (( 0 < options[$opt] && options[$opt]-- ))
+    (( 0 < num_options[$opt] && num_options[$opt]-- ))
   done
+  return 0
 }
 
 _apt_consume_long () {
   local long opt
   opt="$canonicalize[--$1]"
-  (( 0 < options[$opt] && options[$opt]-- ))
+  (( 0 < num_options[$opt] && num_options[$opt]-- ))
+  return 0
 }
 
 _apt-get () {
@@ -373,18 +372,18 @@ _apt-get () {
     -c,--config-file:configfile \
     -o,--option:arbitem \
     -- \
-    /$'update\0' \| \
-    /$'upgrade\0' \| \
-    /$'install\0' /$'[^\0]#\0' !'_deb_packages uninstalled "$expl_packages[@]" || _deb_packages installed "$expl_packages[@]" ' \# \| \
-    /$'remove\0' /$'[^\0]#\0' !'_deb_packages installed "$expl_packages[@]"' \# \| \
-    /$'dist-upgrade\0' \| \
-    /$'dselect-upgrade\0' \| \
-    /$'clean\0' \| \
-    /$'autoclean\0' \| \
-    /$'check\0' \| \
-    /$'source\0' /$'[^\0]#\0' !'_deb_packages avail "$expl_packages[@]"' \# \| \
-    /$'help\0' \| \
-    /"[]"	!'compadd "$expl_action[@]" update upgrade install remove dist-upgrade dselect-upgrade clean autoclean check source help'
+    /$'update\0'/ \| \
+    /$'upgrade\0'/ \| \
+    /$'install\0'/ /$'[^\0]#\0'/ :'_deb_packages uninstalled "$expl_packages[@]" || _deb_packages installed "$expl_packages[@]" ' \# \| \
+    /$'remove\0'/ /$'[^\0]#\0'/ :'_deb_packages installed "$expl_packages[@]"' \# \| \
+    /$'dist-upgrade\0'/ \| \
+    /$'dselect-upgrade\0'/ \| \
+    /$'clean\0'/ \| \
+    /$'autoclean\0'/ \| \
+    /$'check\0'/ \| \
+    /$'source\0'/ /$'[^\0]#\0'/ :'_deb_packages avail "$expl_packages[@]"' \# \| \
+    /$'help\0/' \| \
+    /"[]"/	:'compadd "$expl_action[@]" update upgrade install remove dist-upgrade dselect-upgrade clean autoclean check source help'
 
   _apt-get () {
     local expl_action expl_packages
@@ -410,19 +409,19 @@ _apt-cache () {
     -c,--config-file:configfile \
     -o,--option:arbitem \
     -- \
-    /$'help\0' \| \
-    /$'add\0' /$'[^\0]#\0' !'_files' \# \| \
-    /$'gencaches\0' \| \
-    /$'showpkg\0' /$'[^\0]#\0' !'_deb_packages avail "$expl_packages[@]"' \# \| \
-    /$'stats\0' \| \
-    /$'dump\0' \| \
-    /$'dumpavail\0' \| \
-    /$'unmet\0' \| \
-    /$'check\0' \| \
-    /$'search\0' \| \
-    /$'show\0' \| \
-    /$'depends\0' \| \
-    /"[]"	!'compadd "$expl_action[@]" help add gencaches showpkg stats dump dumpavail unmet check search show depends'
+    /$'help\0'/ \| \
+    /$'add\0'/ /$'[^\0]#\0'/ :'_files' \# \| \
+    /$'gencaches\0'/ \| \
+    /$'showpkg\0'/ /$'[^\0]#\0'/ :'_deb_packages avail "$expl_packages[@]"' \# \| \
+    /$'stats\0'=$status[4]/ \| \
+    /$'dump\0'/ \| \
+    /$'dumpavail\0'/ \| \
+    /$'unmet\0'/ \| \
+    /$'check\0'/ \| \
+    /$'search\0'/ \| \
+    /$'show\0'/ \| \
+    /$'depends\0'/ \| \
+    /"[]"/ :'compadd "$expl_action[@]" help add gencaches showpkg stats dump dumpavail unmet check search show depends'
 
   _apt-cache () {
     local expl_action expl_packages expl_pkg_cache expl_src_cache
@@ -450,8 +449,8 @@ _apt-cdrom () {
     -c,--config-file:configfile \
     -o,--option:arbitem \
     -- \
-    /$'add\0' \| \
-    /"[]"	!'compadd "$expl_action[@]" add'
+    /$'add\0'/ \| \
+    /"[]"/	:'compadd "$expl_action[@]" add'
 
   _apt-cdrom () {
     local expl_action expl_mount_point
@@ -471,13 +470,13 @@ _apt-config () {
     -c,--config-file:configfile \
     -o,--option:arbitem \
     -- \
-    /$'shell\0' \
+    /$'shell\0'/ \
       \( \
-	/$'[^\0]#\0' !'compgen "$expl_shell_var[@]" -v' \
-	/$'[^\0]#\0' !'compadd "$expl_config_key[@]" - ${${(f)"$(apt-config dump 2>&1)"}% *}' \
+	/$'[^\0]#\0'/ :'compgen "$expl_shell_var[@]" -v' \
+	/$'[^\0]#\0'/ :'compadd "$expl_config_key[@]" - ${${(f)"$(apt-config dump 2>&1)"}% *}' \
       \) \# \| \
-    /$'dump\0' \| \
-    /"[]"	!'compadd "$expl_action[@]" shell dump'
+    /$'dump\0'/ \| \
+    /"[]"/	:'compadd "$expl_action[@]" shell dump'
 
   _apt-config () {
     local expl_action expl_shell_var expl_config_key