diff options
author | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-07-18 07:08:36 +0000 |
---|---|---|
committer | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-07-18 07:08:36 +0000 |
commit | 0de287ce9416cb5c2be8090bae3b7c89b2cd8b2a (patch) | |
tree | eea31a22fa5e432728e80719e0ae2eb75b1e223b /Completion/Unix/Command/_chown | |
parent | 5452be3a4ac5fcb587981625d1a4e5ccb503f652 (diff) | |
download | zsh-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/_chown | 33 |
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 |