about summary refs log tree commit diff
path: root/Completion/Unix/Command/_chown
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-07-18 07:08:36 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-07-18 07:08:36 +0000
commit0de287ce9416cb5c2be8090bae3b7c89b2cd8b2a (patch)
treeeea31a22fa5e432728e80719e0ae2eb75b1e223b /Completion/Unix/Command/_chown
parent5452be3a4ac5fcb587981625d1a4e5ccb503f652 (diff)
downloadzsh-0de287ce9416cb5c2be8090bae3b7c89b2cd8b2a.tar.gz
zsh-0de287ce9416cb5c2be8090bae3b7c89b2cd8b2a.tar.xz
zsh-0de287ce9416cb5c2be8090bae3b7c89b2cd8b2a.zip
add support for -R option (15402)
Diffstat (limited to 'Completion/Unix/Command/_chown')
-rw-r--r--Completion/Unix/Command/_chown33
1 files changed, 33 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_chown b/Completion/Unix/Command/_chown
new file mode 100644
index 000000000..34b31f6c9
--- /dev/null
+++ b/Completion/Unix/Command/_chown
@@ -0,0 +1,33 @@
+#compdef chown chgrp
+
+local suf usr grp req expl
+
+if [[ CURRENT -eq 2 || CURRENT -eq 3 && $words[CURRENT-1] = -* ]]; then
+  if [[ $service = chgrp ]] || compset -P '*[:.]'; then
+    if (( EGID && $+commands[groups] )); then  # except for root
+      _wanted groups expl 'group' compadd $(groups) && return 0
+    fi
+    _groups && return 0
+  else
+    if [[ $OSTYPE = (solaris*|hpux*|*bsd*) ]]; then
+      suf=':'
+    else
+      suf='.'
+    fi
+    compset -S '.*' && unset suf
+    _users -S "$suf" -q && return 0
+  fi
+else
+  if [[ $service = chgrp ]]; then
+    grp=${words[CURRENT-1]}
+  else
+    usr=${words[CURRENT-1]%%[.:]*}
+    usr=${${(M)usr:#[0-9]#}:-${userdirs[$usr]:+.$usr.}}
+    grp=${${(M)words[CURRENT-1]%%[.:]*}#?}
+  fi
+  [[ -n $grp ]] && grp="${${(M)grp:#[0-9]#}:-.$grp.}"
+  req=( ${usr:+\^u$usr} ${grp:+\^g$grp} )
+  (( EUID )) && req=( u$EUID$^req )
+
+  _files -g "*(${(j:,:)req})" && return 0
+fi