about summary refs log tree commit diff
path: root/Completion/Unix/Command/_env
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2016-07-08 23:09:18 +0200
committerOliver Kiddle <opk@zsh.org>2016-07-08 23:10:41 +0200
commit304aa25184f927ccc034bb98f6ac744d29006bb4 (patch)
treedf1810ccaf5e223913493bce2e2e3528a3667820 /Completion/Unix/Command/_env
parent13f4bb29363e2a4c6a6e2971a929bd677043d866 (diff)
downloadzsh-304aa25184f927ccc034bb98f6ac744d29006bb4.tar.gz
zsh-304aa25184f927ccc034bb98f6ac744d29006bb4.tar.xz
zsh-304aa25184f927ccc034bb98f6ac744d29006bb4.zip
38812: a few new completions and update some command options
Diffstat (limited to 'Completion/Unix/Command/_env')
-rw-r--r--Completion/Unix/Command/_env53
1 files changed, 43 insertions, 10 deletions
diff --git a/Completion/Unix/Command/_env b/Completion/Unix/Command/_env
index 96261bba8..9b2a1e011 100644
--- a/Completion/Unix/Command/_env
+++ b/Completion/Unix/Command/_env
@@ -1,13 +1,46 @@
 #compdef env
 
-if _pick_variant gnu=Free\ Soft unix --version; then
-  _arguments \
-    '(--ignore-environment -i)'{-i,--ignore-environment}'[start with empty environment]' \
-    '*'{-u,--unset=}'[remove variable from the environment]:env var to remove:compadd ${(k)parameters[(R)*export*]}' \
-    '--help[help]' \
-    '--version[version]' \
-    '(-):command: _command_names -e' \
-    '*::arguments: _normal'
-else
-  _precommand
+local context state line variant args ret=1
+
+_pick_variant -r variant gnu=Free\ Soft $OSTYPE --version
+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*"'
+      '(- *)--help[display help information]'
+      '(- *)--version[display version information]'
+    )
+  ;;
+  freebsd*)
+    args=(
+      '(-i)*-u[remove variable from the environment]:env var to remove:_parameters -g "*export*"'
+      '-P[specify alternate executable search PATH]:path:_dir_list'
+      '-S[perform word splitting]'
+      '*-v[verbose output]'
+    )
+  ;&
+  *)
+    if (( $words[(i)-] < CURRENT )); then
+      words[(i)-]=()
+      (( CURRENT-- ))
+    else
+      args+=(
+	'(-i)'{-,-i}'[start with empty environment]'
+      )
+    fi
+  ;;
+esac
+
+_arguments $args \
+  '*::arguments:->normal' && ret=0
+
+if [[ -n $state ]]; then
+  while [[ $words[1] = *=* ]]; do
+    shift words
+    (( CURRENT-- ))
+  done
+  _normal && ret=0
 fi
+
+return ret